2017-02-24 4 views
0

私はすべての要素に独自のCardViewを与えるカスタムフォームの作業に取り組んでいます。 LinearLayoutに要素を追加して、CardViewに追加すると、うまく機能しますが、RelativeLayoutに配置しようとすると、それらの要素が必要な場所には表示されません。バグを示す画像は、Screenshotです。トップは私が得ているエラーです、私はそれが見えるようにしようとしています。 LayoutParamsあなたがgroupに指定した、引数がひっくり返されるべきでプログラムでCardViewの要素を整列する

package com.cpjd.roblu.activities; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.support.v7.widget.CardView; 
import android.view.View; 
import android.view.inputmethod.EditorInfo; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.LinearLayout.LayoutParams; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

import com.cpjd.roblu.R; 

import java.util.ArrayList; 

public class TeamViewer extends Activity { 

LayoutParams params = new LayoutParams(
     LayoutParams.MATCH_PARENT, 
     LayoutParams.WRAP_CONTENT 
); 

// adapters 
LinearLayout layout; 
@SuppressLint("NewApi") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_team_viewer); 
    layout = (LinearLayout) findViewById(R.id.team_viewer_cards); 

    addEditText(); 
    addEditText(); 
    addEditText(); 
    addEditText(); 
    addBoolean(); 
} 

private void addBoolean() { 
    RadioGroup group = new RadioGroup(this); 
    RadioButton b = new RadioButton(this); 
    b.setText("Yes"); 
    RadioButton b2 = new RadioButton(this); 
    b2.setText("No"); 
    group.addView(b); 
    group.addView(b2); 

    TextView t = new TextView(this); 
    t.setText("Boolean"); 

    RelativeLayout layout = new RelativeLayout(getApplicationContext()); 

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
    group.setLayoutParams(params); 

    layout.addView(t); 
    layout.addView(group); 
    addCard(layout); 
} 

private void addCard(View layout) { 
    CardView card = new CardView(getApplicationContext()); 
    card.setLayoutParams(params); 
    card.setRadius(0); 
    card.setContentPadding(15, 15, 15, 15); 
    card.setUseCompatPadding(true); 
    card.setCardBackgroundColor(Color.DKGRAY); 
    card.setCardElevation(5); 
    card.addView(layout); 
    this.layout.addView(card); 
} 

}

答えて

0

(最初のコンストラクタの引数が第2の幅、である - 高さではなく、反対の):

ここに私の現在のコードは次のとおりです。

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.WRAP_CONTENT, 
    RelativeLayout.LayoutParams.MATCH_PARENT 
); 

そうでない場合groupは、親の全幅を取り、任意の水平方向の配置は、任意のSEをしませんnse。また、ビューを作成するときにgetApplicationContext()を使用しないようにしてください。そうしないと、アプリケーションからテーマが取得されます。これは、Activityで使用しているテーマと異なる場合があります。

最後に、実行時に作成するすべてのビューについてもLayoutParamsを指定します。例えば、layoutのために:

layout.setLayoutParams(new ViewGroup.LayoutParams(MATCH_PARENT, WRAP_CONTENT)) 

LayoutParamsは、すべてのビューのための情報の必須部分であることを、覚えておいてください。指定されていない場合、viewはデフォルトのものを使用します。

関連する問題