アクションバーのカスタムビューをクリックするとonClick()
イベントを取得する必要があるアプリケーションを開発しています。これまでのところ、次のレイアウトを実現できます。
これを達成するための私のコードは次のとおりです。
_@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setCustomView(R.layout.custom_image_button);
getActionBar().setDisplayOptions(
ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
Toast.makeText(getApplicationContext(), "Clicked on ActionBar",
Toast.LENGTH_SHORT).show();
default:
return super.onOptionsItemSelected(item);
}
}
_
これが私のcustom_image_buttonレイアウトです:
_<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/custom_layout"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical" >
<FrameLayout
Android:id="@+id/frame_layout"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true" >
<TextView
Android:id="@+id/points"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="right"
Android:layout_marginRight="10dp"
Android:layout_marginTop="5dp"
Android:background="@drawable/points_yellow"
Android:gravity="center"
Android:paddingLeft="20dp"
Android:textColor="#887141"
Android:textIsSelectable="false"
Android:textSize="22sp"
Android:textStyle="bold" >
</TextView>
<ImageView
Android:id="@+id/badge"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="top|right"
Android:layout_marginRight="5dp"
Android:layout_marginTop="0dp"
Android:src="@drawable/badge_notification" >
</ImageView>
</FrameLayout>
</RelativeLayout>
_
カスタムレイアウトでクリックリスナーを作成しようとしていました。そのために私は次のコードを試しました:
_@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setCustomView(R.layout.custom_image_button);
getActionBar().setDisplayOptions(
ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM);
final LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.custom_image_button, null);
frameLayout = (FrameLayout) v.findViewById(R.id.frame_layout);
frameLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(getApplicationContext(), "Clicked on 1",
Toast.LENGTH_SHORT).show();
return false;
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
Toast.makeText(getApplicationContext(), "Clicked on ActionBar",
Toast.LENGTH_SHORT).show();
default:
return super.onOptionsItemSelected(item);
}
}
_
}
しかし、カスタムイメージでonClick()
イベントを取得できません。私がここで間違っていることは、ガイドしてください。
どんな種類の助けもいただければ幸いです。
したがって、ActionBar
カスタムレイアウトファイルにAndroid:onClick="clickEvent"
を追加する必要があります
私の主な活動:
package com.example.testdemo;
import Android.annotation.SuppressLint;
import Android.app.ActionBar;
import Android.app.Activity;
import Android.app.Dialog;
import Android.content.Context;
import Android.os.Bundle;
import Android.view.LayoutInflater;
import Android.view.Menu;
import Android.view.MotionEvent;
import Android.view.View;
import Android.widget.FrameLayout;
import Android.widget.Toast;
public class MainActivity extends Activity {
private View viewList;
private Dialog dialogMarketList;
String a[] = { "a", "aa" };
private View header;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
View cView = getLayoutInflater().inflate(R.layout.header, null);
actionBar.setCustomView(cView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void clickEvent(View v) {
if (v.getId() == R.id.button1) {
Toast.makeText(MainActivity.this, "you click on button1",
Toast.LENGTH_SHORT).show();
}
if (v.getId() == R.id.button2) {
Toast.makeText(MainActivity.this, "you click on button2",
Toast.LENGTH_SHORT).show();
}
if (v.getId() == R.id.textView1) {
Toast.makeText(MainActivity.this, "you click on textView1",
Toast.LENGTH_SHORT).show();
}
}
}
私のレイアウトheader.xml
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:gravity="center"
Android:orientation="horizontal"
Android:weightSum="3" >
<Button
Android:id="@+id/button1"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:onClick="clickEvent"
Android:text="Button 1" />
<TextView
Android:id="@+id/textView1"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:onClick="clickEvent"
Android:gravity="center"
Android:textColor="#FFFFFF"
Android:text="My action bar"
Android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
Android:id="@+id/button2"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:onClick="clickEvent"
Android:text="Button 2" />
</LinearLayout>
View cView = getLayoutInflater().inflate(R.layout.header, null);
cView.findViewById(R.id.btn_id).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Do stuff here.
}
});
actionBar.setCustomView(cView);