2015-03-03 52 views
0

我正在嘗試創建一個採用「發佈」形式的viewGroup,我需要此視圖在左上角有一個圖像,然後是該帖子右側的用戶名和內容,與彼此對齊,但我似乎無法讓佈局移動。他們只是保持重疊。Android RelativeLayout不移動項目

public ViewGroup generateViewGroup(Context context){ 
    RelativeLayout rl = new RelativeLayout(context); 
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Point p = new Point(); 
    wm.getDefaultDisplay().getSize(p); 
    TextView tvUsername = new TextView(context); 
    tvUsername.setText(userName); 
    TextView tvPostContent = new TextView(context); 
    tvPostContent.setText(postContent); 
    ImageView iv = new ImageView(context); 
    RelativeLayout.LayoutParams lpTvUsername = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
    lpTvUsername.addRule(RelativeLayout.RIGHT_OF,0); 
    lpTvUsername.addRule(RelativeLayout.ALIGN_TOP,0); 
    tvUsername.setLayoutParams(lpTvUsername); 
    RelativeLayout.LayoutParams lpTvPostContent = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
    lpTvPostContent.addRule(RelativeLayout.RIGHT_OF,0); 
    lpTvPostContent.addRule(RelativeLayout.BELOW,1); 
    tvPostContent.setLayoutParams(lpTvPostContent); 
    LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
    if (userPic==null) Log.e("generateViewGroup","userPic is null"); 
    iv.setImageDrawable(userPic); 
    rl.addView(iv, 0); 
    rl.addView(tvUsername,1); 
    rl.addView(tvPostContent); 
    rl.setLayoutParams(lp); 

} 
+0

您不想誇大XML的具體原因是什麼? – Droidekas 2015-03-03 05:46:49

+0

我想堅持java,因爲我們有許多其他類與這一個(http請求等)一起工作,所以它不會很容易在XML中做 – 2015-03-03 06:40:30

回答

0

我已經按以下方式修改了代碼,並將其設置爲空白活動的內容視圖:

RelativeLayout rl = new RelativeLayout(context); 
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Point p = new Point(); 
    wm.getDefaultDisplay().getSize(p); 
    // 
    // integer ID's for all the Views; 
    int ivID = 0x0FD; 
    int tvUserNameID = 0x0FE; 
    int tvPostContentID = 0x0FF; 
    // 
    TextView tvUsername = new TextView(context); 
    // 
    tvUsername.setId(tvUserNameID); // Set the ID 
    // 
    tvUsername.setText(userName); 
    TextView tvPostContent = new TextView(context); 
    // 
    tvPostContent.setId(tvPostContentID); // Set the ID 
    // 
    tvPostContent.setText(postContent); 
    ImageView iv = new ImageView(context); 
    // 
    iv.setId(ivID); // Set the ID 
    // 
    RelativeLayout.LayoutParams lpTvUsername = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
    // 
    //lpTvUsername.addRule(RelativeLayout.RIGHT_OF,0); 
    //lpTvUsername.addRule(RelativeLayout.ALIGN_TOP,0); 
    // 
    // Reference the ID not the Index; 
    lpTvUsername.addRule(RelativeLayout.RIGHT_OF,ivID); 
    lpTvUsername.addRule(RelativeLayout.ALIGN_TOP,ivID); 
    // 
    tvUsername.setLayoutParams(lpTvUsername); 
    RelativeLayout.LayoutParams lpTvPostContent = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
    // 
    // lpTvPostContent.addRule(RelativeLayout.RIGHT_OF,0); 
    // lpTvPostContent.addRule(RelativeLayout.BELOW,1); 
    // 
    // Reference the ID not the Index; 
    lpTvPostContent.addRule(RelativeLayout.RIGHT_OF,ivID); 
    lpTvPostContent.addRule(RelativeLayout.BELOW,tvUserNameID); 
    // 
    tvPostContent.setLayoutParams(lpTvPostContent); 
    LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
    if (userPic==null) Log.e("generateViewGroup","userPic is null"); 
    iv.setImageDrawable(userPic); 
    rl.addView(iv, 0); 
    rl.addView(tvUsername,1); 
    rl.addView(tvPostContent); 
    rl.setLayoutParams(lp); 
    setContentView(rl); 

主要的問題正在發生,因爲在設置你引用的的LayoutParams 索引不是意見ID