2017-02-24 20 views
0

我正在開發一個自定義表單活動,它爲所有元素提供了自己的CardView。當我將元素添加到LinearLayout並將其添加到CardView時,它工作得很好,但是當我嘗試將它們排列在RelativeLayout中時,它們似乎並沒有走到我想要的位置。這是一張顯示錯誤的圖片:Screenshot。頂部是我得到的錯誤,底部是我試圖讓它看起來像。以編程方式對齊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

LayoutParams您爲group指定,參數應該被翻轉(第一構造函數的參數是寬度,第二 - 高度,而不是相反):

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對每個視圖強制性的資料片。如果未指定,則視圖將使用默認值。

相關問題