我在互联网上看到了很多这个问题,但所有解决方案对我都不起作用..
所以这就是问题所在。我想要一个屏幕宽度为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>
我已经尝试了这部分内容,但没有成功。
那么我做错了什么?
答案 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)