我需要动态菜单项,一个用户定义颜色的圆圈,如下所示:

触摸此菜单项将打开一个颜色选择器.
现在,我有一个示例ColorPickerIcon,它扩展了View
public class ColorPickerIcon extends View {
private Paint mPaint;
private int mColor;
private final int mRadius = 20;
public ColorPickerIcon(Context context) {
super(context);
mColor = Color.BLACK;
mPaint = createPaint();
}
public ColorPickerIcon(Context context, AttributeSet attrs) {
super(context, attrs);
mColor = Color.BLACK;
mPaint = createPaint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(0, 0, mRadius, mPaint);
}
public void setPaintColor(int color) {
mColor = color;
}
private Paint createPaint() {
Paint temp = new Paint();
temp.setAntiAlias(true);
temp.setStyle(Paint.Style.STROKE); …Run Code Online (Sandbox Code Playgroud) 我正在使用actionbarsherlock它.我在动作栏中想要的示例:
[登录] [公司徽标] [过滤器]
我在操作栏中获得的示例:
[登录] [公司徽标] [过滤器]
我在res/menu中创建了登录按钮,公司徽标和过滤按钮(以drawables的形式)activity_main.xml.但是,操作栏上的那些按钮无法完全向左移动,即使我已删除默认应用程序徽标并将其设置为false:
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayShowHomeEnabled (false);
Run Code Online (Sandbox Code Playgroud)
这是菜单中的代码activity_main.xml:
<item android:id="@+id/login"
android:icon="@drawable/login_btn"
android:layout_gravity="left"
android:showAsAction="always"/>
<item android:id="@+id/logo"
android:icon="@drawable/logo_btn"
android:layout_gravity="center"
android:showAsAction="always"/>
<item android:id="@+id/filter"
android:icon="@drawable/filter_btn"
android:layout_gravity="right"
android:showAsAction="always"/>
Run Code Online (Sandbox Code Playgroud) 在我的操作栏中,我已经定义了一个菜单项,可以通过以下代码显示文本"DONE":
menu.xml文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/action_register_text"
android:actionLayout="@layout/action_done_text"
android:title="@string/action_done"
android:showAsAction="always"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
action_done_text.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/expand_activities_button"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:clickable="true"
android:focusable="true"
android:addStatesFromChildren="true">
<TextView
android:id="@+id/register_action_bar_done"
android:layout_width="53dp"
android:layout_height="35dp"
android:layout_gravity="center"
android:layout_marginRight="10dip"
android:gravity="center"
android:text="DONE" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
我已onCreateOptionsMenu在代码中正确实现,并且视图可以正确显示文本,但是当我点击DONE文本时,onOptionsItemSelected不会调用.对我来说,似乎无法识别click事件.
我想知道上面的方法是不是添加文本菜单项的好方法?
我发现这篇文章如何添加一个开关到android动作栏? 这对我有用.但我不能得到它的事件.我正在使用appcompat,我使用了app命名空间for actionLayout和showAsAction,但是我无法处理它对onOptionsItemSelected方法的点击?我的应用程序在启动时崩溃了.如何处理它或这段代码有什么问题?这是我的代码
menu_main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">
<item
android:id="@+id/myswitch"
android:title=""
app:showAsAction="always"
app:actionLayout="@layout/switch_layout"/>
Run Code Online (Sandbox Code Playgroud)
switch_layout.xml
<?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="match_parent"
android:orientation="horizontal" >
<Switch
android:id="@+id/switchForActionBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.your_menu, menu);
MenuItem menuItem= menu.findItem(R.id.myswitch);
Switch switcha = (Switch)menuItem.findViewById(R.id.switchForActionBar);
switcha.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// do anything here on check changed
}
});
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
和
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = …Run Code Online (Sandbox Code Playgroud) 我有两个相似的按钮
<?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="match_parent"
android:orientation="horizontal" >
<Button
android:id="@+id/sync_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sync"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
作为项目添加到菜单
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/toggle_item"
android:title=""
app:showAsAction="always"
app:actionLayout="@layout/switch_button"
/>
<item
android:id="@+id/sync_item"
android:title=""
app:showAsAction="always"
app:actionLayout="@layout/sync"
/>
</menu>
Run Code Online (Sandbox Code Playgroud)
我在 onCreateOptionsMenu 中将项目膨胀到菜单
getMenuInflater().inflate(R.menu.menu_main, menu);
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好,但是当我在应用程序中单击时,没有任何反应,因为从未调用过 onOptionsItemSelected(MenuItem item)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Integer test = item.getItemId();
switch (item.getItemId()) {
case R.id.toggle_item:
...
case R.id.sync_item:
...
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
添加工具栏
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Run Code Online (Sandbox Code Playgroud)