3

いくつかの単純なメディア コントロールを表示するために分割 ActionBar を使用しています。下記参照:

背景が正しいメディア コントロール

MenuItem.setActionView を使用して早送りボタンと巻き戻しボタンのデフォルト ビューをオーバーライドしました。これは、ユーザーが最初にコントロールに触れて (巻き戻しを開始するため)、その後コントロールを離したこと (巻き戻しを終了するため) を検出する必要があるためです。以下のコードを参照してください。

            ImageView rewindButton = new ImageView(getBaseContext());
        rewindButton.setId(rewindViewID);
        rewindButton.setClickable(true);
        rewindButton.setImageResource(R.drawable.ic_action_rewind);
        rewindButton.setOnTouchListener(forwardBackwardListener);
        MenuItem rewindMenu = menu.findItem(R.id.menu_rewind);
        rewindMenu.setActionView(rewindButton);
        return true;

これはすべてうまく機能していますが、意図しない副作用がありました。早送りまたは巻き戻しボタンをタッチすると、デフォルトの青色の背景が表示されません (上のスキップ バック コントロールに示されているように)。背景はまったく表示されません。onTouch ハンドラーで背景を設定しようとしましたが、背景はデフォルトと同じように ActionBar の高さを埋めません (下の例の画像を参照)。削除する方法がわかりません。

背景が短いメニュー

私は運がないので次のことを試しました:

  • ImageView の高さを手動で設定して、ActionBar を埋めようとします
  • onTouch ハンドラから True または False を返す

これを解決する方法を知っている人はいますか?

4

2 に答える 2

1

アイテムが選択されたときに、すべてのアイテムの背景を小さな放射状のグラデーションに設定するという回避策を思いつきました。グラデーションはまだ少し切れていますがほとんど目立ちません。これにより、カスタム ボタンと通常のボタンの外観がほぼ同じになります。

あなたはこのようなもので終わります

最初に、 res/drawable/radialbackground.xml というファイルに放射状グラデーションを作成しました。終了色が透明であることに注意してください。これは、グラデーションを何もフェードしないようにするために重要です。これにより、四角形全体が塗りつぶされなくなります。

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">

      <gradient
        android:centerX="0.5"
        android:centerY="0.5"
        android:endColor="#00FFFFFF"
        android:gradientRadius="35"
        android:startColor="@color/Gray"
        android:type="radial"
         />
</shape>

次に、res/drawable/actionitembackground.xml という StateListDrawable を作成しました。

<?xml version="1.0" encoding="utf-8"?>


<selector xmlns:android="http://schemas.android.com/apk/res/android"
                  android:exitFadeDuration="@android:integer/config_mediumAnimTime" >
        <item android:state_pressed="true" android:drawable="@drawable/radialbackground" />
        <item android:drawable="@android:color/transparent" />
</selector>

次に、その statelistdrawable をカスタム ActionViews の背景に割り当てました。

rewindButton.setBackgroundResource(R.drawable.actionitembackground);

次に、アクション バーのスタイルを変更して、通常のアクション バー アイテムにこの新しい放射状の塗りつぶしを含めました。

したがって、values/styles.xml に以下を追加しました。

<style name="Theme.MyTheme" parent="Theme.Sherlock.Light">
        <item name="android:selectableItemBackground">@drawable/actionitembackground</item>
        <item name="selectableItemBackground">@drawable/actionitembackground</item>
</style>

私の場合、基本スタイルは Theme.Sherlock.Light でしたが、修正したいスタイルに置き換えます。

次に、そのスタイルを AndroidManifest.xml でアプリケーションのスタイルとして設定します

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.MyTheme" 
        android:uiOptions="splitActionBarWhenNarrow" >

これは、背景が切り取られる理由をデバッグしようとするよりも簡単に思えました。おそらく、別の日にもっと時間を費やすことになるでしょう。

于 2012-12-05T06:17:02.820 に答える
0

私はまったく同じ問題を抱えていましたが、アクションバーにスピナーを使用すると、ビューの de minHeight を actionBar の高さに設定する必要があります。

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/drop_down"
android:minHeight="?android:attr/actionBarSize"
>
<Spinner
    android:id="@+id/category_spinner"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/default_selector"
    android:minHeight="?android:attr/actionBarSize"
    android:gravity="center_vertical|right"
    android:paddingRight="5dp"
    />

于 2014-09-03T14:57:31.350 に答える