设置按钮高度等于按钮宽度

时间:2015-04-17 13:54:21

标签: android button height width

我在互联网上看到了很多这个问题,但所有解决方案对我都不起作用..

所以这就是问题所在。我想要一个屏幕宽度为50%的按钮(工作正常)。

但现在我希望它与宽度具有相同的高度。

不知怎的,这不起作用:

Button button1 = (Button) findViewById(R.id.button1);
int btnSize = button1.getLayoutParams().width;
button1.setLayoutParams(new LinearLayout.LayoutParams(btnSize, btnSize));

请参阅以下代码:

Activity1.java:

package nl.jesse.project1;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.LinearLayout;


public class Activity1 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity1);

        Button button1 = (Button) findViewById(R.id.button1);
        int btnSize = button1.getLayoutParams().width;
        System.out.println(btnSize);
        //button1.setLayoutParams(new LinearLayout.LayoutParams(btnSize, btnSize));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_activity1, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

}

Activity_activity1.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"
    tools:context=".Activity1"
    android:weightSum="1.0" >


    <Button
        android:layout_height="wrap_content"
        android:layout_weight=".5"
        android:layout_width="0dip"
        android:text="@string/button1"
        android:id="@+id/button1" />

</LinearLayout>

我已经尝试了这部分内容,但没有成功。

那么我做错了什么?

4 个答案:

答案 0 :(得分:5)

好的我知道这可能不是最有效的方法,但它确保有效。

您创建此ResizableButton类:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.Button;

public class ResizableButton extends Button {

    public ResizableButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int width = MeasureSpec.getSize(widthMeasureSpec);
        setMeasuredDimension(width, width);
    }
}

在您的Activity_activity1.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:weightSum="1.0"
    tools:context=".Activity1">

    <com.example.stackoverflow.ResizableButton
        android:id="@+id/button1"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight=".5"
        android:text="Test" />

</LinearLayout>

然后你有一个总是与宽度相同的按钮,如果你想玩按钮,你的主要活动就必须对ResizableButton对象进行十分转换,而不是一个Button。含义:

 ResizableButton button1 = (ResizableButton) findViewById(R.id.button1);

和Voilà。

答案 1 :(得分:1)

你能不能以编程方式做宽度和高度?而不是在布局中设置它?

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics displayMetrics = Main.this.getResources().getDisplayMetrics();
Point size = new Point();
display.getSize(size);
int width = size.x;

button1.setWidth(width/2);
button1.setHeight(width/2);

Main.this将是您的背景。

答案 2 :(得分:0)

一个不太知道获得Square Layout的简单解决方案是使用PercentRelativeLayout,你可以用XML 100%完成:

<android.support.percent.PercentRelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Button
        app:layout_aspectRatio="100%"
        app:layout_widthPercent="100%" />
</android.support.percent.PercentRelativeLayout>

确保您在应用程序gradle文件中包含该库:

compile 'com.android.support:percent:XX.X.X'

答案 3 :(得分:0)

以下是Mohamed Hamdaoui答案的kotlin版本。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import ctypes
import sys
import subprocess


def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

if is_admin():
    subprocess.call(['wmic', '/output:usracc.txt', 'useraccount', 'list', 'full', '/format:csv'])
else:
    # Re-run the program with admin rights
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)