【问题标题】:adding click listener to titlebar image将点击监听器添加到标题栏图像
【发布时间】:2012-12-25 18:53:04
【问题描述】:

祝大家圣诞快乐,节日快乐!

我正在尝试在默认标题栏左侧显示的图像图标上设置一个侦听器,但到目前为止没有任何运气。

这是我的 Activity 的 onCreate:

@Override public void onCreate(Bundle savedInstanceState) {
   requestWindowFeature(Window.FEATURE_LEFT_ICON);
   super.onCreate(savedInstanceState);
   findViewById(Window.FEATURE_LEFT_ICON).setOnClickListener(new OnClickListener() {
       @Override public void onClick(View v) {
           System.out.println("It works!");
       }
   });
}

有什么建议吗?我希望看不到“不可能”的答案:)

【问题讨论】:

  • 为什么不用ActionBar?
  • 你说的是this titlebar吗?如果是这样,您应该考虑实现一个 ActionBar,标题栏现在作为 UI 惯用语几乎已被弃用。
  • 是的,我认为您会使用 ActionBar 并实现您的活动的 onOptionsItemSelected() 方法。我相信 ActionBar 上应用程序图标的 id 是android.R.id.home
  • @RaghavSood 因为我不想进行完全自定义。我已经对默认外观感到满意,所以我觉得添加点击监听器比尝试重新发明轮子更容易,明白我的意思吗?
  • @dmon 我实际上是在尝试模拟这样的事情:i.haymarket.net.au/News/best-samsung-galaxy-S3-apps-spotify.jpg 左上角的图标是可点击的。这是通过 ActionBar 实现的吗?如果是这样,我将如何去做这样的事情?创建我的自定义视图并用它覆盖默认标题栏?如果是这样,应用倾向于使用的高度是多少?

标签: android android-activity titlebar


【解决方案1】:

左侧图标似乎没有 id,但是对于经典标题栏,有一个可用的 id:android.R.id.title 这是使用此 id 的示例 Activity。无论主题如何,requestWindowFeature(Window.FEATURE_LEFT_ICON); 都应强制使用经典标题栏。

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_LEFT_ICON);
    setContentView(R.layout.activity_main);
    getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,R.drawable.ic_launcher);
    View v = findViewById (android.R.id.title);
    v.setClickable(true);
    v.setOnClickListener(new OnClickListener() {
        @Override public void onClick(View v) {
            Toast.makeText(MainActivity.this, "Works!", Toast.LENGTH_SHORT).show();
        }
    });
}
}

基本上,它的作用是找到标题栏的 id (android.R.id.title),然后为其分配一个 onClickListener

这将不适用于ActionBars,仅适用于经典窗口标题栏。

【讨论】:

  • 你真的试过在手机上运行它吗?我的 Galaxy S3 收到一个空指针。
  • 是的,在 4.0.4 上。你需要有一个经典的主题,比如 Theme.Black/Theme.Light。新的 Holo 主题使用 ActionBar,与其他人提到的一样使用不同的实现。
【解决方案2】:

您应该使用 ActionBar。使用ActionBarSherlock 也可以将它用于低于 3.0 的 Android 版本。要使图标可点击,请参阅 ActionBar API 文档(请参阅下面的链接)。这很容易,您只需激活该行为,然后它就可以像具有特殊 item-id 的菜单项一样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多