私はアプリケーションのチュートリアルを開発しており、ツールバーの特定のアイコンを指す必要があります。 、View mErase = findViewById(R.id.AbErase);
mErase
でアクションメニューでアイコンの場所を取得するにはどうすればよいですか?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
isBeingRestored = (savedInstanceState != null);
Toolbar scToolbar = (Toolbar) findViewById(R.id.Sc_toolbar);
setSupportActionBar(scToolbar);
scToolbar.post(new Runnable() {
@Override
public void run() {
if (!isBeingRestored) {
//View mErase = findViewById(R.id.AbErase);
View mErase = overflowMenu.getItem(0).getActionView();
int[] location = new int[2];
mErase.getLocationOnScreen(location);
eraseIconLeft = location[0];
}
}
}
はnull
に設定されている**** EDITを開始:ここ
<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/AbErase"
android:title="@string/Erase"
android:icon="@android:drawable/ic_delete"
android:orderInCategory="10"
app:showAsAction="ifRoom|collapseActionView" />
<item android:id="@+id/AbSuggest"
android:title="@string/Suggest"
android:icon="@mipmap/ic_lightbulb_outline_white_48dp"
android:orderInCategory="50"
app:showAsAction="ifRoom|collapseActionView" />
<item android:id="@+id/AbUndo"
android:title="@string/ActionBarUndo"
android:icon="@android:drawable/ic_menu_revert"
android:orderInCategory="51"
app:showAsAction="ifRoom|collapseActionView" />
...
は私のコードです:ここでは
は、アクションメニューのためのXMLの抽出物であります **** AbEraseはViewのidではなくMenuItemのIDなので、驚くべきことではありません。 **** end EDIT **** View mErase = overflowMenu.getItem(0).getActionView();
location
は(0,24)に設定されています。これは既にロゴアイコンとタイトルがツールバーにあるため間違っています。
ツールバーのAbErase
ビューの絶対座標を取得するにはどうすればよいですか?
**** EDIT **** ここで静的変数overflowMenu
の初期化を見つけることができるコードです:メソッドは時期尚早である
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
actionBar.collapseActionView();
overflowMenu = menu;
isInitializedMenuItem = menu.findItem(R.id.AbInitialized);
isInitializedMenuItem.setChecked(isInitializeCbxChecked);
return super.onCreateOptionsMenu(menu);
}
私は誤っていない場合、ツールバーが配置された後に実行されるべきです、私のRunnableに 'menuItemView'に関する上記の3つの命令を挿入しました。 '.getSuperclass()// android.support.v7.internal.widget.LinearLayoutICS'を削除した後、' menuItemView'が正しく設定されています。ただし、左、上、右、下のフィールドはすべてゼロに等しい。このコードは早すぎますか?ユーザー対話の前に実行する必要があると仮定して、いつ実行する必要がありますか? – ema3272
@ ema3272どのバージョンのAndroidサポートライブラリを使用していますか?私は何かを見逃しているかどうかを確認するために、関連する情報源を調べます。 技術的には、ビューが可視状態にあるときに実行する必要があります。「onCreate」はあまりにも早いので、動作するはずの「onResume」を試してみてください。 –
'.getSuperclass()//android.support.v7.internal.widget.LinearLayoutICS'は 'ActionMenuView'が 'LinearLayoutCompat'の子になりましたので、エラーが解消されました。 –