我在标签上看过Romain Guy的帖子<merge />,但我仍然不明白它是如何有用的.它是<Frame />标签的一种替代品,还是像这样使用:
<merge xmlns:android="....">
<LinearLayout ...>
.
.
.
</LinearLayout>
</merge>
Run Code Online (Sandbox Code Playgroud)
那么<include />代码在另一个文件中?
如何在Android中包含布局内部布局?
我正在创建共同的布局.我想将该布局包含在另一个页面中.
许多菜单总是有一个项目相同.
有没有办法将该项目定义为额外菜单并将其包含在所有其他菜单中?
像这样的东西:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_main"
android:title="@string/text_mainmenu" />
</menu>
Run Code Online (Sandbox Code Playgroud)
<menu xmlns:android="http://schemas.android.com/apk/res/android"
parent="@menu/main">
<item android:id="@+id/menu_other"
android:title="@string/text_othermenu" />
</menu>
Run Code Online (Sandbox Code Playgroud)
我知道,有可能以programmaticaly方式进行,但我认为xml-way更好.
如何将当前AttributeSet传递给自定义View类?如果我在参数中使用只有Context的构造函数,我会丢失所有主题,并且能够在xml中为该自定义View使用"style"标记.
我所做的是创建一个活动,其中包含我在xml文件中的自定义视图,然后以编程方式创建一个新的活动并将其添加到布局中.我发现在xml中制作的那个具有适当的样式,而我以编程方式创建的那个没有.
据我所知,两者之间的区别在于系统使用CustomLayout1(Context context, AttributeSet attrs)构造函数.问题是当我以编程方式创建它时,我无法弄清楚如何让应用程序将AttributeSet传递给此自定义视图.
这是活动:
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
public class ThemeOne extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout layout = (LinearLayout) findViewById(R.id.mainlayout);
layout.addView(new CustomLayout1(getApplicationContext()));
}
}
Run Code Online (Sandbox Code Playgroud)
这是主要的xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/mainlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.clearsync.test.theme1.CustomLayout1 android:id="@+id/maincustom"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
自定义视图类:
import com.clearsync.test.theme1.R;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
public class CustomLayout1 extends LinearLayout {
private Context context = null;
public CustomLayout1(Context context) { …Run Code Online (Sandbox Code Playgroud) 我可能误解了如何<include>和<merge>工作,但根据的简单例子<合并>和<包括>使用Android中的XML的布局,<include>意味着"采取该文件,并粘贴到这里的内容".
假设您希望有3个活动都具有相同的标题,但具有不同的内容.您仍然需要为每个活动提供3个XML布局文件.每个布局之间的唯一区别是它们在<include>标签中定义了不同的布局.如果我想添加页脚,我必须更改每个布局.
我正在寻找一种实现逆的方法,因此子布局会覆盖父级的特定块(类似于Django模板).这样,如果我想添加该页脚,我只会更改父级,子级将继续覆盖内容.
我有一个首选项屏幕(responder_generic.xml),如下所示:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<Preference
android:defaultValue="false"
android:key="auto_responder_key"
android:layout="@layout/preference_header_switch_item_responder"
android:title="@string/auto_responder">
</Preference>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
我实例化如下:(版本2.3.3)
addPreferencesFromResource(R.xml.responder_generic);
Run Code Online (Sandbox Code Playgroud)
我的布局= preference_header_switch_item_responder看起来如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- Layout of a header item in PreferenceActivity. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="33dp"
android:gravity="center_vertical"
android:minHeight="33dp"
android:id="@+id/preference_header_switch_item_responder"
style="?android:attr/listSeparatorTextViewStyle" >
<RelativeLayout
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_weight="1" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:singleLine="true"
android:text="@string/auto_responder"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textStyle="bold" />
<TextView
android:id="@+id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:ellipsize="end"
android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>
<include layout="@layout/compound_button" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
现在,我在layout文件夹中定义了复合按钮,layout/v-14分别如下:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" …Run Code Online (Sandbox Code Playgroud)