Onu*_*pal 1 android relativelayout
谁能解释我这些代码他们究竟在做什么?我无法理解它是如何添加两个按钮(确定和取消).我希望有一些按钮创建代码new Button()或类似的东西它正在访问带有id的按钮,但在任何xml文件中都没有带有这些id的按钮.我可以R.id.okcancelbar_ok在R文件中看到定义.
谢谢.
原始来源:http://developer.android.com/resources/articles/layout-tricks-merge.html
源代码:http://progx.org/users/Gfx/android/MergeLayout.zip
public class OkCancelBar extends LinearLayout {
public OkCancelBar(Context context, AttributeSet attrs) {
super(context, attrs);
setOrientation(HORIZONTAL);
setGravity(Gravity.CENTER);
setWeightSum(1.0f);
LayoutInflater.from(context).inflate(R.layout.okcancelbar, this, true);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.OkCancelBar, 0, 0);
String text = array.getString(R.styleable.OkCancelBar_okLabel);
if (text == null) text = "Ok";
((Button) findViewById(R.id.okcancelbar_ok)).setText(text);
text = array.getString(R.styleable.OkCancelBar_cancelLabel);
if (text == null) text = "Cancel";
((Button) findViewById(R.id.okcancelbar_cancel)).setText(text);
array.recycle();
}}
Run Code Online (Sandbox Code Playgroud)
LayoutInflater.from(context).inflate(R.layout.okcancelbar, this, true);
Run Code Online (Sandbox Code Playgroud)
这一行用布局R.layout.okcancelbar夸大"this"
((Button) findViewById(R.id.okcancelbar_ok)).setText(text)
Run Code Online (Sandbox Code Playgroud)
这意味着在布局okcancelbar中有一个id为"okcancelbar_ok"的按钮(之前充气)接下来我们为它分配了文本"Ok"
((Button) findViewById(R.id.okcancelbar_cancel)).setText(text);
Run Code Online (Sandbox Code Playgroud)
与上面相同,布局okcancelbar中有一个id为"okcancelbar_cancel"的按钮
所以这段代码做了:1)给视图充气R.layout.okcancelbar 2)获取id为"okcancelbar_ok"的按钮(在前面的布局中声明),并用"okcancelbar_cancel"按钮将文本设置为"Ok"3)idem文字"取消"
"layout/okcancelbar.xml"布局应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<include
layout="@layout/okcancelbar_button"
android:id="@+id/okcancelbar_ok" />
<include
layout="@layout/okcancelbar_button"
android:id="@+id/okcancelbar_cancel" />
</merge>
Run Code Online (Sandbox Code Playgroud)
还应该有一个"values/attrs.xml",如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="OkCancelBar">
<attr name="okLabel" format="string"/>
<attr name="cancelLabel" format="string"/>
</declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)
最后,"layout/okcancelbar_button"应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Button
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</Button>
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你
| 归档时间: |
|
| 查看次数: |
629 次 |
| 最近记录: |