0

問題文

Android-sdkのサンプルフォルダーにある「softkeyboard」の例に従って、独自の仮想キーボードを実装しようとしています。

onCreateInputView() では、次のようなレイアウト インフレータでビューが作成されます。

@Override
public View onCreateInputView() {
    mContainerView = getLayoutInflater().inflate(R.layout.my_keyboard, null);
    return mContainerView;
}

私の美しい仮想キーボード GUI 定義 (my_keyboard.xml) では、このようなボタンをいくつか追加しました。

<Button
    android:id="@+id/my_button1"
    android:onClick="onMyButton1Pressed"
    android:text="@string/my_button1_text" />

プログラムを実行すると、ボタンが機能しているように見えます: onMyButton1Pressed() が呼び出されます OK. 問題は、ボタンの状態の描画 (押したときにオレンジ色のハイライト) が機能しないことです。

EDIT 1:問題は ToggleButton と同じです: 押されたとき、オレンジ色のハイライトは表示されません。ただし、緑色の「チェック」マークは機能します。これらを通常のアクティビティで使用すると、ボタンが押されているときに押し下げるとオレンジ色のハイライトが表示されます。

これまでの私の発見は、役に立つかどうか...

私はグーグルしようとしていて、アンドロイドのドキュメントを読んでいます。どこかで、null ルート要素でインフレートを使用すると、テーマ/スタイル/バックグラウンド-ドローアブル/その他 (正しい用語は何ですか?) がインフレートされた階層に適用されないことを読みました。ボタンの状態が表示されないのはなぜですか?

仮想キーボードを作成するとき、キーボードが追加されるルート要素は何ですか?

また、別のインフレ方法を見つけました:

public View inflate (int resource, ViewGroup root, boolean attachToRoot)

    resource = ID for an XML layout resource to load (e.g., R.layout.main_page)
    root = Optional view to be the parent of the generated hierarchy (if attachToRoot is true), or else simply an object that provides a set of LayoutParams values for root of the returned hierarchy (if attachToRoot is false.)
    attachToRoot = Whether the inflated hierarchy should be attached to the root parameter? If false, root is only used to create the correct subclass of LayoutParams for the root view in the XML.

レイアウトパラメータを抽出できる「ダミー」ビューグループを渡すことはできますか?

4

1 に答える 1

0

マンゴーが提案したように、バックグラウンドドローアブル+セレクターxmlを試しましたが、機能します。したがって、考えられる回避策の1つは次のとおりです。

1.ボタンに背景描画可能を追加

<Button
    android:id="@+id/my_button1"
    android:onClick="onMyButton1Pressed"
    android:text="@string/my_button1_text" 
    android:background="@drawable/my_button_drawable
/>

2. / res /drawable/にmy_button_drawable.xmlを作成しました

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/btn_default_pressed" />
    <item android:state_enabled="false"
          android:drawable="@drawable/btn_default_transparent_normal" />
    <item android:drawable="@drawable/btn_default_normal" />
</selector>

3.次のボタンの背景画像を探しました:ANDROID_SDK_FOLDER / platform / android-8 / data / res / drawable-hdpi /

  • btn_default_normal.9.png(通常の状態の場合)
  • btn_default_pressed.9.png(押された状態の場合)
  • btn_default_transparent_normal.9.png(無効状態の場合)

それらの画像をドローアブルフォルダに追加しました。

これで、ボタンを押すとオレンジ色のハイライトが表示され、無効状態も問題ないように見えます。フォーカスされた状態や選択された状態は必要ないので、これらをセレクターに含めませんでした。

于 2012-10-09T08:48:48.610 に答える