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>
首先拿到当前屏幕的宽度
如果还有和这个控件并列的控件,也拿到并列的布局
根据需求CheckBox控件每个控件间隔10dp,7个控件就是8个间距然后再乘以7就是一个CheckBox的宽度了
计算出包裹CheckBox的控件个数
然后就可以为CheckBox控件赋大小了
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控件根据屏幕大小自适应
- iOS UILabel根据字数自适应宽高以及控件按屏幕大小按比例缩放
- android控件根据屏幕大小自适应 分类: Android界面和组件 2014-07-01 20:12 94人阅读 评论(0) 收藏
- Android控件自适应屏幕大小
- android控件根据屏幕大小自适应
- android自适应屏幕方向和大小
- Android屏幕大小和密度对照表,以及px、dip、sp等像素单位的解释
- android自适应屏幕方向和大小
- Android屏幕大小和密度对照表,以及px、dip、sp等像素单位的解释
- 分享:Android屏幕大小和密度对照表,以及px、dip、sp等像素单位的解释
- android自适应屏幕方向和大小
- Android自适应屏幕大小和layout布局
- android自适应屏幕方向和大小
- Android自适应屏幕大小和layout布局(横屏|竖屏)
- [android UI]应用程序自适应屏幕大小
- Android开发屏幕大小自适应
- Android自适应屏幕方向、大小和分辨率
- [android UI]应用程序自适应屏幕大小
- Android自适应屏幕方向、大小和分辨率
- Android自适应屏幕方向、大小和分辨率之补充