您的位置:首页 > 移动开发 > Android开发

android 控件的大小计算以及自适应屏幕的大小

2016-08-15 09:13 417 查看
由于android 的屏幕分辨率较多导致布局的时候控件有时会被拉伸,导致和原来的效果差别很大 ,这个时候就需要根据不同的屏幕来调节控件的大小,例如想要为CheckBox的控件根据屏幕设置大小 <LinearLayout
android:id="@+id/ll_awaken_repeat_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:layout_marginTop="@dimen/spacing_middle"
android:layout_below="@+id/ll_layout"
android:layout_alignParentStart="true">

<TextView
android:id="@+id/tv_week_repeat_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/alarm_repeat"
android:layout_marginLeft="@dimen/dp_30"
android:textSize="@dimen/font_16"
android:textColor="#FFFFFF" />

<LinearLayout
android:gravity="center_horizontal"
android:id="@+id/ll_week_repeat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<CheckBox
android:id="@+id/timing_turn_on_sunday"
style="@style/timing_week_checkbox"
android:text="@string/sunday" />

<CheckBox
android:id="@+id/timing_turn_on_monday"
style="@style/timing_week_checkbox"
android:text="@string/monday" />

<CheckBox
android:id="@+id/timing_turn_on_tuesday"
style="@style/timing_week_checkbox"
android:text="@string/tuesday" />

<CheckBox
android:id="@+id/timing_turn_on_wednesday"
style="@style/timing_week_checkbox"
android:text="@string/wednesday" />

<CheckBox
android:id="@+id/timing_turn_on_thursday"
style="@style/timing_week_checkbox"
android:text="@string/thursday" />

<CheckBox
android:id="@+id/timing_turn_on_friday"
style="@style/timing_week_checkbox"
android:text="@string/friday" />

<CheckBox
android:id="@+id/timing_turn_on_saturday"
style="@style/timing_week_checkbox"
android:text="@string/saturday" />
</LinearLayout>
</LinearLayout>

首先拿到当前屏幕的宽度
mainView.getMeasuredWidth()


如果还有和这个控件并列的控件,也拿到并列的布局
//TextVeiw的宽度
tv_week_repeat.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
int tvWeekRepeatWidth = tv_week_repeat.getMeasuredWidth();
这个TextView布局使用了一个 layout_marginLeft="30dp" 要将他转换成屏幕分辨率
int tvWeekRepeatMarginLeft = getResources().getDimensionPixelOffset(R.dimen.dp_30);
这个时候就可以用屏幕的宽度减去TextView的宽度再减去30dp的宽度
int residual = mainView.getMeasuredWidth() - tvWeekRepeatWidth - tvWeekRepeatMarginLeft;
就剩下包裹子控件的宽度了
根据需求CheckBox控件每个控件间隔10dp,7个控件就是8个间距然后再乘以7就是一个CheckBox的宽度了
int everyCheckBoxWH = (int) ((residual-itemSpace*8)/7.0f);


计算出包裹CheckBox的控件个数
int lens = ll_awaken_repeat_layout.getChildCount();


然后就可以为CheckBox控件赋大小了
LinearLayout.LayoutParams lp = null;
CheckBox cb = null;
for (int i = 0; i < lens; i++) {
cb = (CheckBox) ll_awaken_repeat_layout.getChildAt(i);
lp = (LinearLayout.LayoutParams) cb.getLayoutParams();
if(i == lens-1){//最后1个item靠在最有边,让他距离右边<span style="font-family: Arial, Helvetica, sans-serif;">itemSpace距离</span>

lp.setMargins(itemSpace,0,itemSpace,0);
} else {
lp.setMargins(itemSpace,0,0,0);//顺序为左上右下
}
lp.width = everyCheckBoxWH;
lp.height = everyCheckBoxWH;

cb.setLayoutParams(lp);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 布局