0

クリック可能に設定したレイアウトの背景として使用する 9 パッチのドローアブルを使用したい

私が使用するドローアブルは、実際には次のように記述したセレクター 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/action_item_pressed" />
    <item android:drawable="@drawable/action_item" />
</selector>

私のレイアウトは次のようなものです:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:clickable="true"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="5dp"
    android:padding="8dp"
    android:background="@drawable/action_item_btn">

<ImageView
    android:id="@+id/icon" 
    android:layout_width="30dp" 
    android:layout_height="30dp"
    android:src="@drawable/sword_item"
    android:scaleType="centerInside"/>

<ProgressBar 
    android:id="@+id/progress"
    android:layout_width="35dp"
    android:layout_height="5dp"
    android:layout_marginTop="2dp"
    style="@android:style/Widget.ProgressBar.Horizontal"/>
</LinearLayout>

問題は、ビューを押すと表示されaction_item drawableず、表示されることです。action_item_pressed drawable

何かご意見は?

このビューを膨らませる方法は、これを引き起こす可能性がありますか?

ところで:Eclipseのグラフィカルレイアウトでは表示されており、アプリケーションの実行中にビューを追加すると機能します。

このビューを膨らませる方法は次のとおりです(メソッドから呼び出しますonCreate):

int achievementsNumber = AchievementsManager.ACTIVE_ACHIEVEMENTS_COUNT;
    m_achievementsLayout = new LinearLayout(m_context.getApplicationContext());
    m_achievementsLayout.setOrientation(LinearLayout.VERTICAL);
    m_achievementsLayout.setGravity(Gravity.CENTER);

    LayoutInflater inflater = (LayoutInflater)m_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    for(int i=0; i < achievementsNumber; i++){
        inflater.inflate(R.layout.achievement_item, m_achievementsLayout, true);
    }

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.CENTER_VERTICAL);
    params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
    addView(m_achievementsLayout, params);
4

1 に答える 1

0

このビューを膨らませonCreateてアクティビティのレイアウトに追加することは問題であり、この問題を引き起こしたようです。

インフレーションを移動し、onResumeの後にビューを追加すると、機能します。

その理由は、ViewGroup私がインフレートビューを追加しているのに、まだサイズがないためだと思います。

于 2012-06-07T09:16:49.447 に答える