it-swarm.com.de

Hinzufügen von Layout mit Parametern programmgesteuert Android

Hallo, ich habe einen Hauptbildschirm.

<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>

Und es gibt einen 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;                
                }                             
            }
        });

Ich möchte programmgesteuert hinzufügen

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

wo w

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

Aber wenn mir das gefällt

                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;

Meine Anwendung stürzt ab. Können Sie mir bitte erklären, wie Sie programmgesteuert mit meinen Parametern (abhängig von der Breite und Höhe des Bildschirms des Geräts) erstellen? Ich werde alle Vorschläge nehmen. Vielen Dank.

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

Dies wird einen Fehler auslösen, da LinearLayout das untergeordnete Element des relativen Layouts ist. Daher müssen Sie RelativeLayoutParams dafür festlegen.

Verwenden Sie stattdessen diese 

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

oder Anstatt ein neues LayoutParams zu erstellen, können Sie das vorhandene LayoutParams der Ansicht wie folgt wiederverwenden.

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

Anstatt ein neues LayoutParams zu erstellen, sollten Sie das vorhandene Layout ändern.

Ändern Sie Ihren Code in:

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;
0
David Manpearl