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

分享几点Android 开发中的小技巧

2011-03-25 11:24 417 查看
Android 在XML里面共享同一布局文件

使用XML的方式为背景添加渐变的效果

如何用代码自定义Android 自动生成的标题?

在ActivityGroup里面如何访问子Activity的View 并操作它去改变UI?

1.Android 在XMl里面共享同一布局文件

一直以为共享同一布局文件都是在之前写好的布局之后复制过来,或者通过 java代码使用layoutInflater Add进来的。但今天提供了一个更为方便的使用方法,可以在你的任意LAYOUT文件里面将其他的LAYOUT文件拿过来使用,代码也很简单,如下:

<?
xml version="1.0" encoding="UTF-8"
?>

<
LinearLayout
android:id
="@+id/FrameLayout01"

android:background
="@drawable/layout_background"
android:layout_width
="fill_parent"

android:layout_height
="wrap_content"
xmlns:android
="http://schemas.android.com/apk/res/android"
>

<
TextView
android:text
="欢迎你使用本软件"
android:id
="@+id/TextView01"

android:textColor
="#f0f0f0"
android:layout_width
="wrap_content"

android:layout_height
="wrap_content"
></
TextView
>

</
LinearLayout
>

这是我定义的公用layout 文件,我给他起名为:title

然后我们在另外的布局文件如下使用:

<
include
layout
="@layout/title"

/>

即可将title 的布局直接拿到我们当前的布局文件中。

Tip:使用include标记将layout 放入我们当前的layout文件,也可以直接使用当前 view .findViewByid得到title 布局文件中的任意View 。

2.使用XML的方式为背景添加渐变的效果

为背景实现渐变效果,最传统的方法是用PS制作一张渐变的效果图,但我人懒 没去学PS技术,也懒得更增加一个图片在应用里面,这里使用了Google 提供的一个非常棒的方法来解决背景渐变的功能。

首先,在Drawable 文件夹里面添加一个xml文件,然后写入如下代码:

<?
xml version="1.0" encoding="UTF-8"
?>

<
shape
xmlns:android
="http://schemas.android.com/apk/res/android"
>

<
gradient
android:startColor
="#52adcd"
android:endColor
="#1c87b1"

android:angle
="270.0"
>

</
gradient
>

</
shape
>


应属性比较简单,这里不多做介绍,android:shape="rectangle" 为代表渐变的形状为矩形块。android:angle
="270.0"代表角度为270,由上到下的渐变,如果我改变成0那么就变成了从左到右的渐变,如果改变90.0那么渐变会从下边往下渐变,朋友们可以
多改变一下参数试试效果。

发个效果图吧:



Tip:效果图用的角度是0。

3.如何用代码自定义Android 自动生成的标题?

这个比较简单只用了三句代码:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

setContentView(R.layout.main);

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);

效果如下图:



Tip:这三句代码的位置必须如上代码。

4.在ActivityGroup里面如何访问子Activity的View 并操作它去改变UI?

要知道如何在ActivityGroup里面操作子Activity的布局View 那么得先了解一下,如何将Activity放入ActivityGroup 里面,这里我封装了一个小小的方法,公供参考:

/**

* 为ActivityGroup的一个ViewGroup设置动态的Activity View 对象

*

*
@param
上下文

*
@param
LocalActivityManager对象

*
@param
ActivityGroup想要包容Activity

* View 对象的容器(ViewGroup)

*
@param
通过Intent的意图打算启用哪个Activity类

*
@param
开始Activity

* 设置的Id

*/

public

static

void
getView(Context context, LocalActivityManager lam,

LinearLayout layout_load, Class
<?>
cls, String Id) {

Intent intent
=

new
Intent(context, cls);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Window w
=
lam.startActivity(Id, intent);

View v
=
w.getDecorView();

layout_load.removeAllViews();

layout_load.setPadding(
5
,
5
,
5
,
5
);

layout_load.addView(v,
new
LinearLayout.LayoutParams(

LinearLayout.LayoutParams.FILL_PARENT,

LinearLayout.LayoutParams.FILL_PARENT));

}

然后在ActivityGroup页面如此使用:

private
LocalActivityManager manager;
//
声明一个LocalActivityManager对象

manager
=
getLocalActivityManager();
//
得到这个对象

界面初始化时:

/**

* 初始化

*/

void
init() {

comonHelp.getView(
this
, manager, main, preferenceSet.
class
,
"
swc
"
);

}

有了设置的ID了,那就可以得到当前的Activity 了。

下面给出我用过的一段代码,以作参考:

SharedPreferences.Editor editor
=
getSharedPreferences(

"
com.swc.yaomei_preferences
"
,

Activity.MODE_PRIVATE).edit();

LocalActivityManager manager
=
getLocalActivityManager();

PreferenceActivity acitivty
=
(PreferenceActivity) manager

.getActivity(
"
swc
"
);

for
(
int
i
=

0
; i
<

9
; i
++
) {

editor.putString(
"
KEY_
"

+
i,
"
N/A
"
);

PreferenceScreenExt ext
=
(PreferenceScreenExt) acitivty

.findPreference(
"
KEY_
"

+
i);

RelativeLayout layout
=
(RelativeLayout) ext

.getLayout();

TextView summary
=
(TextView) layout.getChildAt(
1
);

summary.setText(
"
N/A
"
);

}

editor.commit();

System.gc();


面的PreferenceActivity 是得到一个PreferenceAcitity
因为我是要修改位于ActivityGroup里面对应的Preference所以这里要获得一个PreferenceAcitity
,如果你是一个普通的Activity 直接得到一个Activity 对象就行,之后的操作都是一致的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: