gpt4 book ai didi

android - 如何为 Android 布局文件创建可重用的 xml 包装器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:17 25 4
gpt4 key购买 nike

我有几个布局文件,除了一个部分外,大部分都是相同的。有没有一种方法可以将通用 XML 集中在一个地方?而不是复制/粘贴,并且在我想进行 1 处更改时必须更新一堆文件?

我知道我可以包含来自其他 XML 文件的 XML,但公共(public)代码不是内部控件;它是外包装;所以包括不起作用。基本上,我有一堆看起来像这样的文件:

<LinearLayout
android:id="@+id/row"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">

<ImageView android:layout_height="26dp"
android:id="@+id/checkImage"
android:layout_width="26dp"
android:layout_alignParentTop="true"
android:scaleType="fitCenter"/>

<!-- Different types of views go here depending on which layout file it is -->

<ImageButton android:layout_height="fill_parent"
android:id="@+id/playButton"
android:layout_width="42dp"
android:src="@drawable/play_button"
android:scaleType="center"

android:background="#00000000"/>

</LinearLayout>

基本上,我想做 ASP.Net 对母版页所做的事情。有什么选择吗?

最佳答案

解决方案非常简单。

您需要在 onCreate() 函数 SetContentView 中扩展“Activity”类到您的基本 xml 布局,还需要覆盖基本 Activity 类中的 setContentView

例如:

1.使用以下代码创建base_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/image_view_01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxHeight="50dp" />
</LinearLayout>

<LinearLayout
android:id="@+id/base_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</LinearLayout>
</LinearLayout>
  1. 创建BaseActivity.java
public class BaseActivity extends Activity {
ImageView image;
LinearLayout baseLayout;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.base_layout);

this.image = (ImageView) this.findViewById(R.id.image_view_01);
this.baseLayout = (LinearLayout) this.findViewById(R.id.base_layout);

this.image.setImageResource(R.drawable.header);
}

@Override
public void setContentView(int id) {
LayoutInflater inflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(id, this.baseLayout);
}
}

SomeActivity.java

public class SomeActivity extends BaseActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.some_layout);

//rest of code
}
}

到目前为止,我唯一注意到的是,在请求进度条 (requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)) 时,这需要在调用 super.onCreate 之前完成。我认为这是因为在调用此函数之前还不能绘制任何东西。

这对我来说非常有用,希望您会发现它对您自己的编码有用。

关于android - 如何为 Android 布局文件创建可重用的 xml 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com