我正试图在点击按钮上给选项菜单充气。
我设法使用按钮openOptionsMenu();
中的onClick event
对其进行充气(因为我们使用的是自定义字段的布局,如ImageView,操作栏上的文本框)。
但菜单底部是膨胀的。现在我的菜单充气如下图:
我想让它垂直打开(如下所示)。
我该怎么做?
以下是我的代码示例:
private Button optionsMenu;
optionsMenu = (Button)findViewById(R.id.optionsMenu);
super.onCreate(savedInstanceState);
setContentView(R.layout.menu_layout);
optionsMenu.setOnClickListener(menuInflate);
private OnClickListener menuInflate = new OnClickListener() {
@Override
public void onClick(View v) {
openOptionsMenu();
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.options_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Uri uri;
Intent i;
switch (item.getItemId()) {
case R.id.option1:
uri = Uri.parse("http://www.yahoo.com");
i = new Intent(Intent.ACTION_VIEW, uri);
startActivity(i);
return true;
case R.id.option2:
uri = Uri.parse("tel:92345678");
i = new Intent(Intent.ACTION_CALL, uri);
startActivity(i);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/option1" android:title="About"
android:orderInCategory="101" android:showAsAction="withText" />
<item android:id="@+id/option2" android:title="Help"
android:orderInCategory="102" android:showAsAction="withText" />
</menu>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/content_bg_color">
<RelativeLayout
android:id="@+id/menu_sub_header"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/header_bg"
android:paddingTop="5dip"
android:paddingBottom="5dip">
<com.abc.ThirdParty.SmartImageView
android:id="@+id/user_profile_image"
android:layout_width="54dip"
android:layout_height="54dip"
android:scaleType="fitXY"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:background="@drawable/portrait"/>
<TextView
android:id="@+id/username_text_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/user_profile_image"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:gravity="center"
android:textSize="22sp"
android:fontFamily="sans-serif-light"
android:textStyle="bold"
android:textColor="@android:color/white"/>
<Button
android:id="@+id/optionsmenu_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="5dp"
android:layout_centerVertical="true"
android:gravity="center"
android:background="@drawable/ic_options_menu"/>
</RelativeLayout>
</RelativeLayout>
答案 0 :(得分:1)
要在点击时显示菜单项,请按照docs中的说明将showAsAction
属性设置为never
:
从不:永远不要将此项目放在应用栏中。而是在应用栏的溢出菜单中列出该项目。
因此,请在溢出菜单中为您想要的项目设置此项:
android:showAsAction="never"
<强>更新强>
另外,删除您手动放在optionsMenu
上的Toolbar
图像(带有三个点的图像)。如果有Android
属性设置为showAsAction
的菜单项,或者never
中没有足够的空间来显示项目,Toolbar
会自动放置该图标。
并从图片的onClickListener
中移除这些方法并将其放入Activity
类:
@Override
public boolean onCreateOptionsMenu(Menu menu)
@Override
public boolean onOptionsItemSelected(MenuItem item)
更新#2
如果您想要一个带有溢出菜单按钮的自定义Toolbar
,则无需为其添加Button
(带有3个点图标)。如果您要自定义Toolbar
将整个布局代码放在xml中的Toolbar
内,并将其设置为onCreate
内的活动工具栏,如下所示:
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" >
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/content_bg_color">
<RelativeLayout
android:id="@+id/menu_sub_header"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/header_bg"
android:paddingTop="5dip"
android:paddingBottom="5dip">
<com.abc.ThirdParty.SmartImageView
android:id="@+id/user_profile_image"
android:layout_width="54dip"
android:layout_height="54dip"
android:scaleType="fitXY"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:background="@drawable/portrait"/>
<TextView
android:id="@+id/username_text_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/user_profile_image"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:gravity="center"
android:textSize="22sp"
android:fontFamily="sans-serif-light"
android:textStyle="bold"
android:textColor="@android:color/white"/>
</RelativeLayout>
</RelativeLayout>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
然后在onCreate
中设置工具栏,如下所示:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
并且不用担心溢出菜单按钮,它会在上面讨论的情况下自动添加。
以下是此代码的输出:
答案 1 :(得分:0)
像这样更改你的options_menu.xml
<item
android:id="@+id/option1"
android:orderInCategory="100"
android:title="About"
app:showAsAction="never" />
<item
android:id="@+id/option2"
android:orderInCategory="100"
android:title="Help"
app:showAsAction="never" />
在你的活动..
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.options_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.option1) {
//perform with Option1 here
} else if (item.getItemId() == R.id.option2) {
//perform with Option2 here
}
return super.onOptionsItemSelected(item);
}
它会自动放置您不需要手动放置的按钮!