web-dev-qa-db-ja.com

style = "?android:attr / buttonBarStyle"を親レイアウトに設定し、style = "?android:attr / buttonBarButtonStyle"をボタンに設定すると、ボタンが非表示になります

Androidの推奨事項に従い、style="?android:attr/buttonBarStyle"を親レイアウトに設定し、style="?android:attr/buttonBarButtonStyle"をボタンに設定しました。

これで、私のレイアウトは次のようになります。

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="horizontal"
    style="?android:attr/buttonBarStyle">

    <Button
        Android:id="@+id/button1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Button 1"
        style="?android:attr/buttonBarButtonStyle"/>

    <Button
        Android:id="@+id/button2"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Button 2"
        style="?android:attr/buttonBarButtonStyle"/>

    <Button
        Android:id="@+id/button3"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Button 3"
        style="?android:attr/buttonBarButtonStyle"/>

</LinearLayout>

しかし、スタイルを設定した後、これらのボタンはまだクリックできますが、非表示になっています。

何が悪いのか教えてください。

編集:追加の詳細

まあ、私はこのレイアウトをテストするために特別に新しいプロジェクトを作成しましたが、驚くべきことにそれは実際に機能します。

より正確に言うと、実際には、このレイアウトを別のレイアウトに動的に追加します。次のようになります。

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical">

    <LinearLayout
        Android:id="@+id/buttons_panel_container"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal">

    </LinearLayout>

    <!-- some other stuff -->

</LinearLayout>

コード:

LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

LinearLayout buttonsPanelContainer = (LinearLayout) findViewById(R.id.buttons_panel_container);

View buttonPanelView = null;
if(chosenValueType.equals("some_type")) {

    buttonPanelView = layoutInflater.inflate(R.layout.some_buttons_panel, null);

    Button Button1 = (Button) buttonPanelView.findViewById(R.id.button1);
    Button1.setOnClickListener(this);
    Button Button2 = (Button) buttonPanelView.findViewById(R.id.button2);
    Button2.setOnClickListener(this);

} else if (chosenRawValueType.equals("another_type") { 
    //...

ViewGroup insertPoint = (ViewGroup) buttonsPanelContainer;
insertPoint.addView(buttonPanelView, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

申し訳ありませんが、それが当てはまるとは思いませんでした。

では、何が問題なのですか?

10

私はただ使う必要がありました

LayoutInflater layoutInflater = LayoutInflater.from(this);

の代わりに

LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
1

提供された例は私にも役立ちます。このスタイル属性を検索すると、次の例が見つかりました: https://developer.Android.com/samples/BorderlessButtons/res/layout/sample_main.html ここでは、すべてのボタンにスタイルを適用するために読むことができます。あなたが与えた例であなたがしたこと。つまり、何かがボタンを覆っている、またはボタンのテキストが白(またはアプリの背景色)に設定されているということです。

0
Thelsien