2

Buttons私は7つ等しいLinearLayout

<?xml version="1.0" encoding="utf-8"?>    
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:weightSum="7" >

<Button
    android:id="@+id/btn_mon"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_weight="1"
    android:background="@color/white"        
    android:text="0" />

<Button
    android:id="@+id/btn_tus"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:text="0"
    android:background="@color/white"        
    android:layout_weight="1"/>
<Button
    android:id="@+id/btn_wen"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:text="0"
    android:background="@color/white"        
    android:layout_weight="1"/>
<Button
    android:id="@+id/btn_thu"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:text="0"
    android:background="@color/white"        
    android:layout_weight="1"/>
<Button
    android:id="@+id/btn_fri"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:text="0"
    android:background="@color/white"        
    android:layout_weight="1"/>
<Button
    android:id="@+id/btn_sat"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:text="0"
    android:background="@color/white"        
    android:layout_weight="1"/>
<Button
    android:id="@+id/btn_sun"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:text="0"
    android:background="@color/white"       
    android:layout_weight="1"/>
</LinearLayout>

それらのOnClickListenerも同じです(そして初期化も):

if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.calendar_row, null);
            }

final Button btn_mon = (Button)convertView.findViewById(R.id.btn_mon);
final Button btn_tus = (Button)convertView.findViewById(R.id.btn_tus);
final Button btn_wen = (Button)convertView.findViewById(R.id.btn_wen);
final Button btn_thu = (Button)convertView.findViewById(R.id.btn_thu);
final Button btn_fri = (Button)convertView.findViewById(R.id.btn_fri);
final Button btn_sat = (Button)convertView.findViewById(R.id.btn_sat);
final Button btn_sun = (Button)convertView.findViewById(R.id.btn_sun);

        btn_mon.setOnClickListener(new View.OnClickListener() {             
            public void onClick(View v) { onCalBtnClick(btn_mon, weekdays.get(0).data); }});
        btn_tus.setOnClickListener(new View.OnClickListener() {             
            public void onClick(View v) { onCalBtnClick(btn_tus, weekdays.get(1).data); }});
        btn_wen.setOnClickListener(new View.OnClickListener() {             
            public void onClick(View v) { onCalBtnClick(btn_wen, weekdays.get(2).data); }});
        btn_thu.setOnClickListener(new View.OnClickListener() {             
            public void onClick(View v) { onCalBtnClick(btn_thu, weekdays.get(3).data); }});
        btn_fri.setOnClickListener(new View.OnClickListener() {             
            public void onClick(View v) { onCalBtnClick(btn_fri, weekdays.get(4).data); }});
        btn_sat.setOnClickListener(new View.OnClickListener() {             
            public void onClick(View v) { onCalBtnClick(btn_sat, weekdays.get(5).data); }});
        btn_sun.setOnClickListener(new View.OnClickListener() {             
            public void onClick(View v) { onCalBtnClick(btn_sun, weekdays.get(6).data); }});

onCalBtnClickメソッド:

private void onCalBtnClick(Button btn, int day){            

            Log.d("debug", String.valueOf(day));
            btn.setTextColor(mContext.getResources().getColor(R.color.orange));
            //selectedYear, month are global
            Intent intent = new Intent();
            intent.putExtra("year", selectedYear);
            intent.putExtra("month", month);
            intent.putExtra("day", day);
            setResult(RESULT_OK, intent);
            finish();
        }

ただし、メソッドに入れると(それぞれから呼び出されますLog.d)、真ん中の3つのボタンしか機能しません。左側の2つのボタン(btn_monbtn_tus)と右側の2つのボタン(btn_satbtn_sun)は、ユーザーのクリックに反応しません。真ん中のボタンは正常に機能します。onCalBtnClickclicklistener

これは同様の質問ですAndroidLinearLayoutmakeボタンは機能しませんが、私のレイアウトファイルはそこの回答のパターンに対応していますが、それでもボタンは機能しません

アップデート

レイアウトファイルの固定ボタンの高さと幅(50dpからwrap_content)を削除すると、すべてのボタンが機能し始めました。

ただし、現在は必要に応じて表示されません。ボタンのテキストの間に必要なスペースがあります。

そして主な質問:なぜですか?

4

3 に答える 3

1

レイアウトでウェイトを使用している場合は、いくつかの比率でいくつかのオブジェクトで埋める必要があることを示しています。「wrap_content」の正反対です。重みを使用すると、外部レイアウトは内部ビューのサイズを定義し、「wrap_content」は外部レイアウトサイズが内部ビューによって定義されることを意味します。その場合、ウェイトを削除するか、内部ビューのサイズを固定するなど、どのアプローチが適しているかを判断してください。

于 2012-12-11T12:00:58.133 に答える
0

線形レイアウトの幅と高さをFILL_PARENTに設定します。これは確実に機能します。

于 2012-12-11T11:09:45.507 に答える
0

アダプタークラスの外部で、weekdays配列の初期化後に、ボタンのすべてのsetOnClickListenerを宣言してみてください。

それはあなたの問題を解決します。

または、すべてのボタンに次のような条件を設定してみてください。

if (btn_mon != null && position < weekdays.size()) {
      btn_mon.setOnClickListener(new View.OnClickListener() {             
            public void onClick(View v) { onCalBtnClick(btn_mon, weekdays.get(0).data); }});
}
于 2012-12-11T11:11:33.867 に答える