Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set button height and width as wrap content and fill parent

I'm developing a application where the user is supposed to be able to alter the apperence of a button by pressing other buttons. I use four buttons to set height as wrap content, height as fill parent, width as wrap content and width as fill parent.

I googled a bit and found a solution using LayoutParams although that code didn't specify if height of width was alterd. I also got errors saying my IDE couldn't recognise "LayoutParams". What is the best way to do this?

like image 364
SweSnow Avatar asked Jul 27 '12 20:07

SweSnow


2 Answers

What you need to look for - is View.ViewGroup.LayoutParams. Every LayoutParams has constant value for MATCH_PARENT and WRAP_CONTENT attributes. I have prepared simple code sample you can play with:

Activity:

package com.example.stack2;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener{

    Button test;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b = (Button)findViewById(R.id.button1);
        b.setOnClickListener(this);
        b = (Button)findViewById(R.id.button2);
        b.setOnClickListener(this);
        b = (Button)findViewById(R.id.button3);
        b.setOnClickListener(this);
        b = (Button)findViewById(R.id.button4);
        b.setOnClickListener(this);
        test = (Button)findViewById(R.id.test);
    }
    public void onClick(View v)
    {
        LayoutParams lp = test.getLayoutParams();
        if(v.getId() == R.id.button1)
        {
            lp.height = LayoutParams.WRAP_CONTENT;
        }else if(v.getId() == R.id.button2){
            lp.width = LayoutParams.WRAP_CONTENT;
        }else if(v.getId() == R.id.button3){
            lp.height = LayoutParams.MATCH_PARENT;
        }else if(v.getId() == R.id.button4){
            lp.width = LayoutParams.MATCH_PARENT;
        }
        test.setLayoutParams(lp);
    }
}

Layout xml:

<LinearLayout 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"
    android:orientation="vertical" >

    <LinearLayout 
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal">

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="h_wc" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="w_wc" />

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="h_fp" />

        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="h_fp" />

    </LinearLayout>

    <Button
        android:id="@+id/test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="test" />

</LinearLayout>
like image 129
Pavel Dudka Avatar answered Oct 11 '22 18:10

Pavel Dudka


By using the below code you can easily alter the height and width dynamically.

btn = new Button(Activity.this);
btn.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,     LayoutParams.WRAP_CONTENT));

btn.setText("\t\t" + lbl + "\t\t\t  ");
        btn.setBackgroundResource(R.drawable.blue_button);
btn.setwidth(100);
like image 42
moDev Avatar answered Oct 11 '22 16:10

moDev