第一章、活用布局

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. ubuntu apt-get

    近期重新拿起linux的书看了下,整理了一下linux的命令. ubuntu预装了APT和dpkg ,“APT”是 “Advanced Package Tool”的简写,“dpkg ”是“Debian ...

  2. vi或vim快捷键

    1.dG:这是删除光标所在行到最后一行的内容(包括光标所在行的内容) 2.ggVG全选

  3. Custom template tags and filters

    Code layout Custom template tags and filters must live inside a Django app. If they relate to an exi ...

  4. 一些嵌入式和FPGA相关模块的开源

    工作一年,整理下手头做过的东西,分享出来,希望能帮到大家. 嵌入式方面,主要集中在Xilinx家的器件上,ZYNQ居多.Linux相关的就不贴了,网上的资料太多,xilinx-wiki上资料都是比较全 ...

  5. java项目打成jar包时引用了第三方jar,此时我们该如何解决呢

    Web项目做多了,反而对单纯的java项目陌生了,今天我们在开发项目的过程中,碰到一个这样的需求:需要将java项目放到linux系统上跑起来,当然这个javaSE项目是带main方法的.我们知道在I ...

  6. C++的数据类型

    C++的数据类型 计算机处理的对象是数据,而数据是以某种特定的形式存在的(例如整数.浮点数.字符等形式). 不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组).数据结构指的是数据的组 ...

  7. SCOI2015题解 && 考试小结

    Day1: 第一题:裸地二分+网络流:二分答案,连接将每行每列拆成点,对于满足答案的格子行列连边,看是否流量是否大于t即可,可惜第k大看成了第k小,然后100分就没了. 第二题:倍增,考虑贪心算法,就 ...

  8. bzoj 1138: [POI2009]Baj 最短回文路 dp优化

    1138: [POI2009]Baj 最短回文路 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 161  Solved: 48[Submit][Sta ...

  9. uva 11992 - Fast Matrix Operations

    简单的线段树的题: 有两种方法写这个题,目前用的熟是这种慢点的: 不过不知道怎么老是T: 感觉网上A过的人的时间度都好小,但他们都是用数组实现的 难道是指针比数组慢? 好吧,以后多用数组写写吧! 超时 ...

  10. csu 10月 月赛 A 题

    Welcome to CSU OnlineJudge Problem A: Small change Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 15 ...