自定义Button实现百分比宽度

自定义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%" />

好了,代码很简单,赶快去体验一把 吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值