【发布时间】:2018-06-21 19:39:30
【问题描述】:
我有一个 TextView 和 ImageButton 我想在我的 ActionBar 中显示。我能够成功呈现 TextView 或 ImageButton,但不能两者。要么我没有足够的空间来容纳它们,要么我不了解 LayoutParams 的工作原理,或者完全不了解其他东西。
只是 TextView:
只是 ImageButton:
我怎样才能以编程方式将这两个都放入 ActionBar 中?
MapActivity.java 中 onCreate 方法的声明和内部:
private ActionBarDrawerToggle mToggle;
private DrawerLayout mDrawerLayout;
private ActionBar actionBar;
private TextView actionBarDistanceText;
/*
ACTION BAR STUFF onCREATE
*/
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
mDrawerLayout = findViewById(R.id.nav_drawer);
mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open, R.string.close);
mDrawerLayout.addDrawerListener(mToggle);
mToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
/*
NAV STUFF onCREATE
*/
mNavigationView = findViewById(R.id.navigation_view);
if (mNavigationView != null) {
mNavigationView.setNavigationItemSelectedListener(this);
}
这是在 MapActivity.java 中呈现它们的代码部分:
/*
CODE FOR DISTANCE TEXT AND SHARE BUTTON
*/
actionBar = getSupportActionBar();
actionBarDistanceText = new TextView(MapActivity.this);
ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(android.app.ActionBar.LayoutParams.MATCH_PARENT, android.app.ActionBar.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(150, 0, 0, 0);
actionBarDistanceText.setLayoutParams(layoutParams);
actionBarDistanceText.setTextSize(20);
actionBarDistanceText.setTextColor(Color.WHITE);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setCustomView(actionBarDistanceText);
ImageButton shareBtn = new ImageButton(actionBar.getThemedContext());
shareBtn.setScaleType(ImageButton.ScaleType.CENTER);
shareBtn.setImageResource(R.drawable.share_button_selector);
shareBtn.setBackgroundColor(Color.TRANSPARENT);
ActionBar.LayoutParams shareLayoutParams = new ActionBar.LayoutParams(
ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.WRAP_CONTENT, Gravity.END | Gravity.CENTER_VERTICAL);
shareLayoutParams.rightMargin = 40;
shareBtn.setLayoutParams(shareLayoutParams);
actionBar.setCustomView(shareBtn);
这是我的 share_button_selector.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Share Button -->
<item android:state_pressed="true" android:drawable="@drawable/ic_share_green" android:background="@null"/>
<item android:state_pressed="false" android:drawable="@drawable/ic_share_white" android:background="@null"/>
</selector>
nav_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/nav_group_2">
<item android:title="@string/nav_map_type">
<menu>
<item
android:id="@+id/basic_map"
android:icon="@drawable/basic_map_24x24"
android:title="@string/nav_basic"/>
<item
android:id="@+id/terrain_map"
android:icon="@drawable/ic_terrain_black_24dp"
android:title="@string/nav_terrain"/>
<item
android:id="@+id/satellite_map"
android:icon="@drawable/satellite_24x24"
android:title="@string/nav_sat"/>
<item
android:id="@+id/hybrid_map"
android:icon="@drawable/ic_satellite_black_24dp"
android:title="@string/nav_hybrid"/>
</menu>
</item>
<!--
SETTINGS GROUP
-->
</group>
<group
android:id="@+id/nav_group_3">
<item android:title="@string/nav_settings">
<menu>
<item
android:id="@+id/standard_distance"
android:icon="@drawable/ic_settings_black_24dp"
android:title="@string/nav_standard_setting"/>
<item
android:id="@+id/metric_distance"
android:icon="@drawable/ic_settings_black_24dp"
android:title="@string/nav_metric_setting"/>
</menu>
</item>
</group>
</menu>
如果我不注释掉 MapActivity.java 中的 ImageButton 代码,TextView 就会消失。只留下代码的 TextView 部分就可以看到它。
【问题讨论】:
-
尝试使用
actionbar,而不是toolbar。 Toolbar 比 ActionBar 支持更多。
标签: android android-actionbar layoutparams