Добавить макет с параметрами программным способом 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> 

И есть изображение.

  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; 

Мое приложение аварийно завершает работу. Можете ли вы рассказать, как программно создавать мои параметры (связанные с шириной и высотой экрана устройства)? Я буду принимать любые предложения. Спасибо.

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

Это вызовет ошибку, потому что LinearLayout является дочерним элементом Relative layout, поэтому для этого вам нужно установить 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); 

Вместо создания нового 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;