Android中所有活动的常见可点击页眉

我有一个在所有布局中具有通用标题的应用程序。 我希望每当用户点击ID为btn_home的ImageView时,应用程序将返回到特定的活动,例如我的“主”。

什么是最好的方法来做到这一点?

我知道我可以为每个活动定义onClick(View v) ,但也许有更好的方法来做到这一点。 即使每个活动都是一些(通过遗产),其他具有onClick(View v)定义听起来不好。

header.xml

 <RelativeLayout ...> <RelativeLayout android:id="@+id/relativeLayout1" ...> <ImageView android:id="@+id/logo_cats"></ImageView> <ImageView android:id="@+id/btn_home" ...></ImageView> </RelativeLayout> </RelativeLayout> 

每一个布局

 ... <include layout="@layout/header" android:id="@+id/header" android:layout_height="wrap_content" android:layout_width="fill_parent" /> ... 

Solutions Collecting From Web of "Android中所有活动的常见可点击页眉"

你可以制作一个自定义的组件,并在其中定义“onClick()”。 例如,创build一个新的类Header ,它将扩展一个RelativeLayout并在其中扩展header.xml。 然后,而不是<include>标签,您可以使用<com.example.app.Header android:id="@+id/header" ... 没有代码重复和头成为完全可重用。

UPD:这是一些代码示例

header.xml:

 <merge xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView android:id="@+id/logo" .../> <TextView android:id="@+id/label" .../> <Button android:id="@+id/login" .../> </merge> 

activity_with_header.xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" ...> <com.example.app.Header android:id="@+id/header" .../> <!-- Other views --> </RelativeLayout> 

Header.java:

 public class Header extends RelativeLayout { public static final String TAG = Header.class.getSimpleName(); protected ImageView logo; private TextView label; private Button loginButton; public Header(Context context) { super(context); } public Header(Context context, AttributeSet attrs) { super(context, attrs); } public Header(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void initHeader() { inflateHeader(); } private void inflateHeader() { LayoutInflater inflater = (LayoutInflater) getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.header, this); logo = (ImageView) findViewById(R.id.logo); label = (TextView) findViewById(R.id.label); loginButton = (Button) findViewById(R.id.login); } 

ActivityWithHeader.java:

 public class ActivityWithHeader extends Activity { private View mCreate; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_with_header); Header header = (Header) findViewById(R.id.header); header.initHeader(); // and so on } } 

在这个例子中,Header.initHeader()可以在Header的构造函数中移动,但通常这个方法提供了一个很好的方式来传递一些有用的监听器。 希望这会有所帮助。

例如,扩展Activity类并构build一个MyActivity类。 在这个MyActivity类中,你可以包含onClick的代码。

现在创build一个只包含标题的布局。 将该布局包含在您的活动布局中。

从MyActivity扩展所有活动 – 就是这样。

如果您在ListActivities中需要相同的行为,那么也要创build一个MyListActivity。