gpt4 book ai didi

android - 为选项菜单子(monad)项添加右边距

转载 作者:行者123 更新时间:2023-11-29 22:56:43 26 4
gpt4 key购买 nike

目前,我的选项菜单与屏幕的末尾对齐。我想给它一个边距,比如 android:layout_marginEnd = "20dp"。我怎样才能做到这一点?

我的选项菜单:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">

<item
android:id="@+id/menu_items"
android:icon="@drawable/menu_icon"
app:showAsAction="always">

<menu>
<group android:id="@+id/item1">
<item
android:id="@+id/download"
android:icon="@drawable/download_icon"
android:title="Download"></item>
</group>

<group android:id="@+id/item2">
<item
android:id="@+id/invite"
android:icon="@drawable/invite_icon"
android:title="Invite"></item>
</group>
</menu>
</item>
</menu>

我的自定义工具栏:

<androidx.appcompat.widget.Toolbar
android:id="@+id/menu_toolbar"
app:popupTheme="@style/ThemeOverlay.MyTheme"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_below="@id/greetText"> <!--assume it comes somewhere in the centre due to this-->

</androidx.appcompat.widget.Toolbar>

我的菜单项主题:

<style name="ThemeOverlay.MyTheme" parent="ThemeOverlay.AppCompat.Light">
<item name="android:textColor">@color/dimGray</item>
<item name="android:textSize">14sp</item>
<item name="android:layout_marginEnd">20dp</item> <!-- doesn't work-->
<item name="android:fontFamily">@font/quicksand_medium</item>
<item name="android:background">@drawable/options_menu_background</item>
</style>

这是我的问题的图像。它显示了菜单的末端和屏幕是如何对齐的。我想要这两者之间的空间/边距。

enter image description here

最佳答案

这是一个有趣的问题。我尝试了很多在互联网上找到的东西,但没有任何效果。我尝试使用 dropDownHorizo​​ntalOffset 属性设置 actionOverflowMenuStyle,但这也不起作用。最后,我得到了一个工作正常的 PopupMenu。这是实现。

通过将弹出菜单作为子菜单打开的单个项目来缩短初始菜单。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
android:id="@+id/menu_items"
android:icon="@drawable/ic_close_swipe"
android:title="@string/app_name"
app:showAsAction="always" />
</menu>

然后在您的/res/menu/ 文件夹中创建另一个菜单,命名为popup_menu.xml,如下所示。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
android:id="@+id/menu_items"
android:icon="@drawable/ic_close_swipe"
android:title="@string/app_name"
app:showAsAction="always" />
</menu>

现在在您的 MainActivity 中,只需添加以下函数来处理菜单按钮和弹出菜单的点击操作。

public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar myToolbar = findViewById(R.id.menu_toolbar);
setSupportActionBar(myToolbar);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {
case R.id.menu_items:
showPopupMenu();
return true;
default:
return false;
}
}

public void showPopupMenu() {
PopupMenu popup = new PopupMenu(this, findViewById(R.id.menu_items));
popup.setOnMenuItemClickListener(this);
popup.inflate(R.menu.popup_menu);
popup.setGravity(Gravity.END);

Object menuHelper;
Class[] argTypes;
try {
Field fMenuHelper = PopupMenu.class.getDeclaredField("mPopup");
fMenuHelper.setAccessible(true);
menuHelper = fMenuHelper.get(popup);
argTypes = new Class[]{boolean.class};
menuHelper.getClass().getDeclaredMethod("setForceShowIcon", argTypes).invoke(menuHelper, true);
} catch (Exception e) {
e.printStackTrace();
}

popup.show();
}

@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.invite:
Toast.makeText(this, "Invite", Toast.LENGTH_LONG).show();
return true;
case R.id.download:
Toast.makeText(this, "Download", Toast.LENGTH_LONG).show();
return true;
default:
return false;
}
}
}

我将工作代码放在这个 Github Branch 中.您可能会考虑从该分支克隆并运行应用程序以检查这是否满足您的期望。

希望对您有所帮助!

关于android - 为选项菜单子(monad)项添加右边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57379774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com