第一章、活用布局

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

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

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

      代码如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:backgorund="#FFFFFF"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="1"> <Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="click me"/>
</LinearLayout>

   分析:

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

  参考链接: http://developer.android.com/reference/android/widget/LinearLayout.html

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文件:

 <?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="pref_first_preferencescreen_key"
android:title="Preferences"> <PreferenceCategory
android:title="User"> <EditTextPreference
android:key="pref_username"
android:summary="Username"
android:title="Username"/>
</PreferenceCategory> <PreferenceCategory
android:title="Application"> <Preference
android:key="pref_rate"
android:summary="Rate the app in the store!"
android:title="Rate the app"/> <Preference
android:key="pref_share"
android:summary="Share the app with your friends"
android:title="Share it"/> <com.manning.androidhacks.hack004.preference.EmailDialog
android:dialogIcon="@drawable/ic_launcher"
android:dialogTitle="Send Feedback"
android:dialogMessage="Do you want to send an email?"
android:key="pref_sendemail_key"
android:negativeButtonText="Cancel"
android:positiveButtonText="OK"
android:summary="Send your feedback by e-mail"
android:title="Send Feedback"/> <com.manning.androidhacks.hack004.preference.AboutDialog
android:dialogIcon="@drawable/ic_launcher"
android:dialogTitle="About"
android:key="pref_about_key"
android:negativeButtonText="@null"
android:title="About"/> </PreferenceCategory> </PreferenceScreen>

  Activity代码:

 public class MainActivity extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
...
Preference ratePref = findPreference("pref_rate");
Uri uri = Uri.parse("market://details?id=" + getPackageName());
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
ratePref.setIntent(goToMarket);
} @Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
} @override
protected void onPause() {
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
} @Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
if (key.equals("pref_username")) {
updateUserText();
}
} private void updateUserText() {
EditTextPreference pref;
pref = (EditTextPreference) findPreference("pref_username");
String user = pref.getText(); if (user == null)
{
user = "?";
}
pref.setSummary(String.format("Username: %s", user));
}
}

Android开发之50个常见实用技巧——活用布局的更多相关文章

  1. Android开发之50个常见实用技巧——添加悦目的动画效果

    Hack.5 使用TextSwitcher和ImageSwitcher实现平滑过渡 实现步骤: 1.通过findViewById()方法获取TextSwitcher对象的引用Swithcer,当然也可 ...

  2. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  3. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  4. Android开发之PopupWindow

      /* *  Android开发之PopupWindow * *  Created on: 2011-8-8 *  Author: blueeagle *  Email: liujiaxiang@g ...

  5. android开发之Animations的使用(二)

    android开发之Animations的使用(二) 本博文主要讲述的是android开发中的animation动画效果的使用,和上一篇博文不同的是,此次四种动画效果,主要使用的是xml文件实现的,提 ...

  6. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

  7. Android开发之eclipse 快捷键

    转自:<Android开发之eclipse 快捷键>http://www.cnblogs.com/aimeng/archive/2012/08/07/2626909.html Ctrl+1 ...

  8. Android开发之旅5:应用程序基础及组件

    引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...

  9. android开发之 Wifi的四个类

    android开发之 Wifi的四个类 在Android中对Wifi操作,android本身提供了一些实用的包,在android.net.wifi包以下.简介一下: 大致能够分为四个基本的类ScanR ...

随机推荐

  1. MVC中Area的使用

    1.Area是什么? MVC 2 中引进了区域的概念,它允许将模型,视图和控制器分成单独的功能节点,换句话说,可以在大型复杂的网站中建立几个区域(模块),每一个区域都有Model,View,Contr ...

  2. uublog在线测试demo

    http://demo.uublog.me/ 后台 http://demo.uublog.me/admin/ 用户名/密码:admin/admin

  3. S3C2440的LCD虚拟显示测试

    一.概述   S3C2440的LCD控制器支持虚拟显示,说的容易理解一点就是,可以显示比实际显示器大的图像.可以这样想象,有一个大的图片,但是显示器(显示串口)比较小,但是我们可以相对于大图片(即大图 ...

  4. php的ftp类

    1.需求 了解php的ftp使用 2.例子 使用CI封装好的ftp类库 上传 $this->load->library('ftp'); $config['hostname'] = 'ftp ...

  5. xmpp 配置数据库 服务器

    一.了解XMPP 协议(标准) XMPP 即时通讯协议 SGIP 短信网关协议 这手机发短信 移动支付和网页支付 0x23232[0,1] 0x23232 0x23232 0x23232 只有协议,必 ...

  6. android SurfaceView绘制 重新学习--切图clipRect详解

    解释都在代码注释中: public class SampleView extends View { private Paint mPaint; private Path mPath; public S ...

  7. 【MS Office2013小技巧】Word中公式中的等号对齐

    步骤: 1. 先将所需要对齐的公式分不同行打出来: 2. 选中所有公式,右键点击并选择“对齐点(A) =”,如图 此时,如果能够正常对齐,则无需进行下面的步骤,但如果出现下图情况并未正常对齐的,再进行 ...

  8. centos系统使用技巧

    ===============================网络配置===============================1 eth0 接口配置:/etc/sysconfig/network ...

  9. 标签form表单里的属性简单介绍了一下

    <form id="form1" name="form1" method="post" action=""> ...

  10. 【C#】动态加载dll程序集

    原文:http://www.cnblogs.com/bomo/archive/2013/03/01/2938165.html 很多时候我们需要用到引用其他程序集,有些程序集是.Net生成的,可以支持反 ...