自定义Button实现百分比宽度
大家都知道,在平常写布局的时候,有时候并不能确定Button的宽度。有时候会很难办,那时候想,如果能给这个Button设置屏幕的百分比就好了。下面我就带大家以Button为例写一个以手机屏幕为宽度的为基准,设置百分比的宽度。
推荐个薅羊毛交流群,帮助大家日常赚点零花钱 364739778,不要指望这个发财哦
首先第一步,需要你在valuse下的attr.xml文件下拷贝一下自定义属性文字
<declare-styleable name="YButton">
<attr name="percentWidthB" format="fraction" />
</declare-styleable>
```
我们来自定义一个YButton继承系统的Button
package com.small.deer.View.BaseView;
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.small.deer.R;
import com.small.deer.Utils.AppUtils;
/**
* author MaYang. 自定义百分比的button
* 2016/12/10 14:35
*/
public class YButton extends Button {
private float mFraction;
public YButton(Context context) {
this(context, null);
}
public YButton(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public YButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.YButton);
// 默认文字居中
setGravity(Gravity.CENTER);
// 默认可点击
setClickable(true);
if (typedArray != null) {
// 得到自定义属性的值
mFraction = typedArray.getFraction(R.styleable.YButton_percentWidthB, 1, 2, 0);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
ViewGroup.LayoutParams params = (ViewGroup.LayoutParams) getLayoutParams();
int screenWidth = getScreenWidth(getContext());
int width = (int) (screenWidth * mFraction);
// 设置控件的宽度
params.width = width;
setLayoutParams(params);
}
/**
* 获得屏幕高度
*
* @param context
* @return
*/
public int getScreenWidth(Context context) {
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(outMetrics);
return outMetrics.widthPixels;
}
}
在布局中直接用即可,但是需要把引用布局的跟布局添加xmlns:app=”http://schemas.android.com/apk/res-auto”
app:percentWidthB=”30%”设置屏幕的百分比距离。
<com.small.deer.View.BaseView.YButton
android:id="@+id/btn_map_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="@dimen/x12"
android:background="@color/global_color"
android:padding="@dimen/x12"
android:text="自定义百分比Button"
android:textColor="@color/white"
app:percentWidthB="30%" />
好了,代码很简单,赶快去体验一把 吧