博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发之50个常见实用技巧——活用布局
阅读量:6709 次
发布时间:2019-06-25

本文共 3152 字,大约阅读时间需要 10 分钟。

第一章、活用布局

Hack1. 使用weight属性实现视图的居中显示

   ①合用weightSum属性和layout-weight属性

    解决问题,如:居中显示按钮,并占据父视图的50%;

      代码如:

 

   分析:

     指定LinearLayout的android:weightSum属性值为1,表示内部所有子视图的weight总和是1;  

  参考链接:

 

 

Hack2 使用延迟加载以及避免代码重复

   ①使用<include/>标签避免代码重复

      如:<include layout="@layout/已经写好的布局文件命"/>

   ②通过viewStub实现view的延迟加载 

      ViewStub 是一种不可视并且大小为 0 的视图,可以延迟到运行时填充(inflate)布局资源。

    当 ViewStub 设置为可视或者inflate() 方法被调用后,就会填充布局资源,然后 ViewStub 便会

    被填充的视图替代。

  inflatedId 属性:是调用viewStub的inflate()方法或setVisibility()方法时返回的ID (被填充的View的ID);

  只需调用setVisibility(View.VISIBLE) 方法即可加载 显示在layout中引用的布局 map

     如: android:layout="@layout/map".

 

Hack3 创建定制的ViewGroup

  情景分析:

    需要在不同的Activity中显示复杂的视图

  优点:

    1、在同的Activity中复用该视图时,更易维护

    2、开发者可以使用自定义属性来定制ViewGroup中子视图的位置

    3、布局文件更简明,更容易理解

    4、如果需要修改margin,不必重新手写计算机每个子视图的margin

   ①理解Android绘制视图的方式

    绘制布局由两个遍历过程组成: 测量过程和布局过程

   ②创建CascadeLayout类,继承自ViewGroup

    重新建attrs.xml文件用于定义那些定制的属性

    在res/values下,建dimens.xml文件,用于保存指定水平间距和垂直间距的默认值

    重写ViewGroup的OnMeasure()、 OnLayout()方法

    ③为子视图添加自定义属性

 

Hack4 偏好设置使用技巧

  偏好设置框架(Preference)的目的是创建简单的偏好设置界面,如果想添加更多复杂UI控制或逻辑,建议单独

创建一个Activity并使用Dialog的主题,然后从偏好设置控件上启动它。

  XML文件:

1 
2
6 7
9 10
14
15 16
18 19
23 24
28 29
38 39
45 46 47 48

  Activity代码:

1 public class MainActivity extends PreferenceActivity implements 2     OnSharedPreferenceChangeListener { 3         @Override 4         public void onCreate(Bundle savedInstanceState) { 5             super.onCreate(savedInstanceState); 6             addPreferencesFromResource(R.xml.prefs); 7             ... 8             Preference ratePref = findPreference("pref_rate"); 9             Uri uri = Uri.parse("market://details?id=" + getPackageName());10             Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);11             ratePref.setIntent(goToMarket);12         }13 14         @Override15         protected void onResume() {16             super.onResume();17             getPreferenceScreen().getSharedPreferences()18                 .registerOnSharedPreferenceChangeListener(this);19         }20 21         @override22         protected void onPause() {23             getPreferenceScreen().getSharedPreferences()24                 .unregisterOnSharedPreferenceChangeListener(this);25         }26 27         @Override28         public void onSharedPreferenceChanged(29             SharedPreferences sharedPreferences, String key) {30                 if (key.equals("pref_username")) {31                     updateUserText();32                 }33         }34 35         private void updateUserText() {36             EditTextPreference pref;37             pref = (EditTextPreference) findPreference("pref_username");38             String user = pref.getText();39 40             if (user == null)41             {42                 user = "?";43             }44             pref.setSummary(String.format("Username: %s", user));45         }46 }

 

转载于:https://www.cnblogs.com/jesonjason/p/5430576.html

你可能感兴趣的文章
排序算法
查看>>
SVN与TortoiseSVN实战:从入门到精通
查看>>
空间统计笔记之三(度量地理分布工具集,Measuring Geographic Distributions)
查看>>
记录:网页播放视频
查看>>
vue插件官方文档,做个记录
查看>>
yum puppet
查看>>
Another mysql daemon already running with the same unix socket
查看>>
Android开发点滴(13) -- Android数据库随同Android应用一同发布
查看>>
VC 创建文件
查看>>
在CentOS6.9上Shell脚本定时释放内存cache
查看>>
QTP的那些事--excel排序和宏的使用
查看>>
[Android Studio 权威教程]断点调试和高级调试
查看>>
hdu1866 A + B forever!(面积并)题解
查看>>
C#中string.format用法详解
查看>>
回档|数字三角形3,4
查看>>
PHP & 符号详解(转)
查看>>
php 获取半年内每个月的订单数量, 总价, 月份
查看>>
linux idea 创建安卓模拟器失败
查看>>
js实现弹窗后选择信息填入text标签中以及需要注意的问题
查看>>
[转载]Thread.Sleep(0)妙用
查看>>