Raf*_*l T 8 android android-layout android-actionbar
我尝试使用此处actionView描述的设置MenuItem .
在我的例子中,ActionViewWidget是一个SeekBar.
问题是,当ActionView点击图标时,它的宽度比预期的要小,如下面的截图所示:
文档说:
如果小部件位于应用栏上,则应用应将小部件显示为图标.如果窗口小部件位于溢出菜单中,则应用程序应将窗口小部件显示为菜单项.当用户与操作视图交互时,它会展开以填充应用栏.
就我而言,没有任何东西可以"扩展".它没有占据整个宽度,而是ActionBar微小的.
为了解决这个问题,我尝试使用另一个类似的视图EditText,但得到了类似的结果 (EditText在开始时很小,但在写入时会扩展).它似乎android.support.v7.widget.SearchView适用于文档中使用的.
我也尝试过Theme.AppCompat.Light.DarkActionBar或Theme.AppCompat.Light.NoActionBar在布局中提供工具栏而没有任何明显的区别.
这是我使用的代码:
主要活动
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* set this on other layout with toolbar in it
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
*/
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.camera_menu, menu);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
app_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/action_item"
android:title="Action"
android:icon="@drawable/ic_icon_in_black_24dp"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.widget.SeekBar"
/>
</menu>
Run Code Online (Sandbox Code Playgroud)
我也试过app:actionViewLayout=@layout/seekbar_layout而不是actionViewClass
seekbarLayout就是这样的
<?xml version="1.0" encoding="utf-8"?>
<SeekBar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/action_seekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
Run Code Online (Sandbox Code Playgroud)
我也试过不同的版本,ViewGroups比如Linear,Relative或FrameLayouts,或试图设置我的SeekBar的固定宽度而没有任何成功.
我在这里错过了什么或做错了什么?
“魔法”发生在Toolbar.expandItemActionView。此方法覆盖展开的布局参数ActionView并将宽度设置为wrap_content。现在提出一种可能的解决方案:
Toolbar.expandItemActionView检查是否ActionView实现CollapsibleActionView接口并调用CollapsibleActionView.onActionViewExpanded方法(如果是)。这是您修复布局参数并将宽度设置为 的机会match_parent。从 派生一个自定义类SeekBar并让它实现CollapsibleActionView:
public class CollapsibleSeekBar extends AppCompatSeekBar implements CollapsibleActionView {
public CollapsibleSeekBar(Context context) {
super(context);
}
public CollapsibleSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CollapsibleSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void onActionViewExpanded() {
ViewGroup.LayoutParams params = getLayoutParams();
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
setLayoutParams(params);
requestLayout();
}
@Override
public void onActionViewCollapsed() {
}
}
Run Code Online (Sandbox Code Playgroud)
通过在您的菜单项中使用它app:actionViewClass。
还要确保使用适当的CollapsibleActionView.
如果您正在使用,android.support.v4.widget.Toolbar您还需要android.support.v7.view.CollapsibleActionView.
如果你有用android.widget.Toolbar的 话android.view.CollapsibleActionView
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |