2013-03-19 89 views
13

您好,我有一个主屏幕。以编程方式添加带参数的布局Android

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 
<fragment 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    class="com.google.android.gms.maps.SupportMapFragment"/> 
<ImageButton 
    android:id="@+id/imageButton1" 
    android:layout_width="55dp" 
    android:layout_height="50dp" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="10dp" 
    android:layout_toLeftOf="@+id/toggleButton1" 
    android:background="@android:drawable/btn_default" 
    android:contentDescription="@string/app_name" 
    android:scaleType="centerCrop" 
    android:src="@drawable/plus_grey" /> 

<LinearLayout 
    android:id="@+id/lay" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_marginEnd="0dp" 
    android:background="#A0FFFFFF" 
    android:orientation="horizontal" 
    android:visibility="invisible" > 

    <TextView 
     android:id="@+id/locinfo" 
     android:layout_width="match_parent" 
     android:layout_height="60dp" 
     android:textColor="@color/cherniy" 
     android:textSize="20sp" 
     android:visibility="visible" /> 
</LinearLayout> 
</RelativeLayout> 

而且还有一个ImageButton的

    button = (ImageButton) findViewById(R.id.imageButton1); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       if (bIcon == false) { 
        button.setImageResource(R.drawable.plus_yellow);                 
        m = myMap.addMarker(new MarkerOptions().position(myMap.getCameraPosition().target).draggable(true));      
        LinearLayout linLayout = (LinearLayout)findViewById(R.id.lay); 
        t = (TextView)findViewById(R.id.locinfo);      
        linLayout.setVisibility(View.VISIBLE); 
        t.setVisibility(View.VISIBLE);      
           bIcon = true; 
       } 
       else { 
        button.setImageResource(R.drawable.plus_grey);            
        m.remove(); 
        LinearLayout linLayout = (LinearLayout)findViewById(R.id.lay); 
        t.setVisibility(View.INVISIBLE); 
        linLayout.setVisibility(View.INVISIBLE);       
        bIcon = false;     
       }        
      } 
     }); 

我想以编程方式添加

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams((w*2)/3, LayoutParams.WRAP_CONTENT); 

其中w

display = getWindowManager().getDefaultDisplay(); 
@SuppressWarnings("deprecation") 
w = display.getWidth(); 

但是当我做这样的

   button.setImageResource(R.drawable.plus_yellow);                 
       m = myMap.addMarker(new MarkerOptions().position(myMap.getCameraPosition().target).draggable(true));      
       LinearLayout linLayout = (LinearLayout)findViewById(R.id.lay); 
       LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams((w*2)/3, LayoutParams.WRAP_CONTENT); 
       linLayout.setLayoutParams(lp); 
       t = (TextView)findViewById(R.id.locinfo);      
       linLayout.setVisibility(View.VISIBLE); 
       t.setVisibility(View.VISIBLE);      
       bIcon = true; 

我的应用程序崩溃。你能告诉我如何以编程方式创建我的参数(与设备的屏幕宽度和高度绑定)?我会采取任何建议。谢谢。

回答

17
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
    (w*2)/3, 
    LayoutParams.WRAP_CONTENT 
); 
linLayout.setLayoutParams(lp); 

这将引发错误,因为LinearLayout是相对布局的孩子,所以你必须设置RelativeLayoutParams了点。

而是使用

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
    (w*2)/3, 
    RelativeLayout.LayoutParams.WRAP_CONTENT 
); 
linLayout.setLayoutParams(lp); 

或 而不是创造新的LayoutParams可以重用针对存在的LayoutParams如下表所示。

RelativeLayout.LayoutParams lp = linLayout.getLayoutParams(); 
lp.width = (w*2)/3; 
lp.height = RelativeLayout.LayoutParams.WRAP_CONTENT; 
linLayout.setLayoutParams(lp); 
+0

谢谢。你需要什么 – 2013-03-19 18:50:58

+0

你可以把进口?我知道是“viewgroup”,但请把= :) – delive 2015-10-01 12:19:42

0

而不是制作一个新的LayoutParams,你应该修改现有的。

你的代码更改为:

button.setImageResource(R.drawable.plus_yellow);                 
m = myMap.addMarker(new MarkerOptions().position(myMap.getCameraPosition().target).draggable(true));      
LinearLayout linLayout = (LinearLayout)findViewById(R.id.lay); 
LinearLayout.LayoutParams lp = linLayout.getLayoutParams(); 
final int left_margin = whatever; 
final int top_margin = 0; 
final int right_margin = whatevermore; 
final int bottom_margin = 0; 
lp.setMargins(left_margin, top_margin, right_margin, bottom_margin); 
lp.width = (w*2)/3; 
linLayout.setLayoutParams(lp); 
t = (TextView)findViewById(R.id.locinfo);      
linLayout.setVisibility(View.VISIBLE); 
t.setVisibility(View.VISIBLE);    
bIcon = true; 
相关问题