Android - 如何访问包含布局中的按钮
Android - how to access buttons inside include layout
我创建了 header.xml 并因此包含在 Main.xml 和 Menu.xml 中。
在 header.xml 我有一个按钮。
Header.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView
android:layout_width="150dp"
android:layout_height="100dp"
android:src="@drawable/logo"
android:id="@+id/header"
android:paddingTop="10px"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/insideButtons">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Main Menu"
android:gravity="right"
android:layout_marginRight="50px"
android:id="@+id/mainMenu"
android:textColor="#604811"
android:textSize="20dp"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="About University"
android:gravity="right"
android:layout_marginRight="50px"
android:id="@+id/about"
android:textColor="#604811"
/>
</LinearLayout>
我想知道如何从主 activity 和菜单 activity 访问此按钮。我正在使用以下代码,但它不起作用。
TextView btn;
public class Header extends AppCompatActivity {
TextView home;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.header);
home = (TextView) findViewById(R.id.mainMenu);
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(),Menu.class);
startActivity(i);
}
});
}}
您需要其父级的 ID 才能获取:
假设 R.id.parent_view
是 R.id.nested_button
的父级:
View parent= findViewById(R.id.parent_view);
Button nestedButton= (Button) parent.findViewById(R.id.nested_button);
nestedButton.setText("Whatever");
使用 findViewById 查找包含的布局,然后使用 findViewById 在该视图上查找按钮。
查看includeView=findViewById("Id of included layout");
按钮 btn=includeView.findViewById(R.id.mainBtn);
Solution 1
将此添加到您的 Main.xml
<include
layout="@layout/header.xml"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
使用Main.java中的以下代码,以同样的方式访问它,看看是否有效。
TextView home;
home= (TextView) findViewById(R.id.mainMenu);
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(),Menu.class);
startActivity(i);
}
});
我在上面所做的 将允许您通过直接引用它们的 ID 从 Main.java 访问 header.xml 的所有元素。
您所要做的就是正确地包含 xml 然后您可以通过各自的 id 直接访问其组件。
Solution 2
将此用于要为其设置 onClick 的按钮或文本视图
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="changeActivity"
android:text="button1" />
然后为单击时发生的情况创建相应的函数。
public void changeActivity(View view)
{
Intent intent = new Intent(FromActivity.this, ToActivity.class);
startActivity(intent);
}
我创建了 header.xml 并因此包含在 Main.xml 和 Menu.xml 中。 在 header.xml 我有一个按钮。
Header.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView
android:layout_width="150dp"
android:layout_height="100dp"
android:src="@drawable/logo"
android:id="@+id/header"
android:paddingTop="10px"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/insideButtons">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Main Menu"
android:gravity="right"
android:layout_marginRight="50px"
android:id="@+id/mainMenu"
android:textColor="#604811"
android:textSize="20dp"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="About University"
android:gravity="right"
android:layout_marginRight="50px"
android:id="@+id/about"
android:textColor="#604811"
/>
</LinearLayout>
我想知道如何从主 activity 和菜单 activity 访问此按钮。我正在使用以下代码,但它不起作用。
TextView btn;
public class Header extends AppCompatActivity {
TextView home;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.header);
home = (TextView) findViewById(R.id.mainMenu);
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(),Menu.class);
startActivity(i);
}
});
}}
您需要其父级的 ID 才能获取:
假设 R.id.parent_view
是 R.id.nested_button
的父级:
View parent= findViewById(R.id.parent_view);
Button nestedButton= (Button) parent.findViewById(R.id.nested_button);
nestedButton.setText("Whatever");
使用 findViewById 查找包含的布局,然后使用 findViewById 在该视图上查找按钮。
查看includeView=findViewById("Id of included layout"); 按钮 btn=includeView.findViewById(R.id.mainBtn);
Solution 1
将此添加到您的 Main.xml
<include
layout="@layout/header.xml"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
使用Main.java中的以下代码,以同样的方式访问它,看看是否有效。
TextView home;
home= (TextView) findViewById(R.id.mainMenu);
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(),Menu.class);
startActivity(i);
}
});
我在上面所做的 将允许您通过直接引用它们的 ID 从 Main.java 访问 header.xml 的所有元素。 您所要做的就是正确地包含 xml 然后您可以通过各自的 id 直接访问其组件。
Solution 2
将此用于要为其设置 onClick 的按钮或文本视图
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="changeActivity"
android:text="button1" />
然后为单击时发生的情况创建相应的函数。
public void changeActivity(View view)
{
Intent intent = new Intent(FromActivity.this, ToActivity.class);
startActivity(intent);
}