2011-03-04 125 views
104

比如我要添加屏幕上的3个按钮的一个左对齐,一个居中,最后一个右对齐如何在代码中设置的RelativeLayout布局PARAMS不在XML

如何设置他们的代码布局,不在XML中?

+0

的可能的复制[如何铺陈在RelativeLayout的浏览程序?(http://stackoverflow.com/questions/2305395/how-to-lay-out-views-in-relativelayout-programmatically) – 2017-01-19 22:20:50

回答

253

只是一个基本的例子:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
Button button1; 
button1.setLayoutParams(params); 

params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
params.addRule(RelativeLayout.RIGHT_OF, button1.getId()); 
Button button2; 
button2.setLayoutParams(params); 

正如你所看到的,这是你必须做的事情:

  1. 创建RelativeLayout.LayoutParams对象。
  2. 使用addRule(int)addRule(int, int)来设置规则。第一种方法用于添加不需要值的规则。
  3. 将参数设置为视图(在本例中为每个按钮)。
+14

这里有几个问题。首先我没有看到你实际上在哪里实例化button1或button2。其次,动态声明的Views(ImageViews,Buttons等)以id为-1来实例化。 -1的id对于规则不起作用。 – 2011-12-06 17:38:08

+0

@Cristian:RelativeLayout.LayoutParams和LayoutParams有什么不同?有什么办法可以缩短? – Ci3 2012-11-16 20:45:08

+3

没有像LayoutParams这样的东西。基类实际上是'ViewGroup.LayoutParams'。如果你想缩短它,只需添加一个包含'RelativeLayout.LayoutParams'的导入。 – Cristian 2012-11-17 17:13:31

6

事情是这样的..

RelativeLayout linearLayout = (RelativeLayout) findViewById(R.id.widget43); 
       // ListView listView = (ListView) findViewById(R.id.ListView01); 

       LayoutInflater inflater = (LayoutInflater) this 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       // View footer = inflater.inflate(R.layout.footer, null); 
       View footer = LayoutInflater.from(this).inflate(R.layout.footer, 
         null); 
       final RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
         RelativeLayout.LayoutParams.FILL_PARENT, 
         RelativeLayout.LayoutParams.FILL_PARENT); 
       layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1); 
footer.setLayoutParams(layoutParams); 
17
RelativeLayout layout = new RelativeLayout(this); 
    RelativeLayout.LayoutParams labelLayoutParams = new RelativeLayout.LayoutParams(
      LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    layout.setLayoutParams(labelLayoutParams); 


    // If you want to add some controls in this Relative Layout 
    labelLayoutParams = new RelativeLayout.LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    labelLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); 


    ImageView mImage = new ImageView(this); 
    mImage.setBackgroundResource(R.drawable.popupnew_bg);   
    layout.addView(mImage,labelLayoutParams); 

    setContentView(layout); 
4

你怎么样只是从视图本身拉布局PARAMS如果你创造了它。

$((RelativeLayout)findViewById(R.id.imageButton1)).getLayoutParams(); 
0

我希望下面的代码会有所帮助。它将创建一个EditText和一个登录按钮。两者都相对放置。全部在MainActivity.java中完成。

package com.example.atul.allison; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.RelativeLayout; 
import android.widget.Button; 
import android.graphics.Color; 
import android.widget.EditText; 
import android.content.res.Resources; 
import android.util.TypedValue;  
    public class MainActivity extends AppCompatActivity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      //Layout 
      RelativeLayout atulsLayout = new RelativeLayout(this); 
      atulsLayout.setBackgroundColor(Color.GREEN); 

      //Button 
      Button redButton = new Button(this); 
      redButton.setText("Log In"); 
      redButton.setBackgroundColor(Color.RED); 

      //Username input 
      EditText username = new EditText(this); 

      redButton.setId(1); 
      username.setId(2); 

      RelativeLayout.LayoutParams buttonDetails= new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT 
      ); 

      RelativeLayout.LayoutParams usernameDetails= new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT 
      ); 

      //give rules to position widgets 
      usernameDetails.addRule(RelativeLayout.ABOVE,redButton.getId()); 
      usernameDetails.addRule(RelativeLayout.CENTER_HORIZONTAL); 
      usernameDetails.setMargins(0,0,0,50); 

      buttonDetails.addRule(RelativeLayout.CENTER_HORIZONTAL); 
      buttonDetails.addRule(RelativeLayout.CENTER_VERTICAL); 

      Resources r = getResources(); 
      int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200,r.getDisplayMetrics()); 
      username.setWidth(px); 

      //Add widget to layout(button is now a child of layout) 
      atulsLayout.addView(redButton,buttonDetails); 
      atulsLayout.addView(username,usernameDetails); 

      //Set these activities content/display to this view 
      setContentView(atulsLayout); 
     } 
    } 
相关问题