日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android自定义radiogroup,Android自定义RadioGroup

發布時間:2025/3/15 Android 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android自定义radiogroup,Android自定义RadioGroup 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近做項目時需要用到RadioGroup,發現Android原生的RadioGroup太丑了,所以自己寫了一個,效果如下所示:

其實就是由4個Button組成的LinearLayout,只是為了方便點擊效果的切換所以封裝了一下。代碼如下:

package com.dy.erp.view;

import android.content.Context;

import android.util.AttributeSet;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.Button;

import android.widget.LinearLayout;

import com.dy.erp.R;

import com.dy.erp.util.DensityUtils;

/**

* Created by dy on 2016/5/25 10:52.

*/

public class MyRadioButton extends LinearLayout {

private Button[] btns;

private int selectedPosition;

private RadioBtnOnClick mRadioBtnOnClick;

public MyRadioButton(Context context, AttributeSet attrs) {

super(context, attrs);

//默認button數量為4,如果讀者擴展的話,只需自定義attrs一個number,在xml里面填寫屬性

//然后在代碼中通過TypedArray獲取number

init(context, 4);

}

public MyRadioButton(Context context) {

super(context);

//默認button數量為4

init(context, 4);

}

//自定義構造函數

public MyRadioButton(Context context, int number) {

super(context);

init(context, number);

}

private void init(Context context, int number) {

//默認排列方式為水平

setOrientation(LinearLayout.HORIZONTAL);

// LayoutInflater inflater = (LayoutInflater) context

// .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

// inflater.inflate(R.layout.view_service, this);

setViews(context, number);

}

private void setViews(Context context, int number) {

btns = new Button[number];

//新建number個Button

for (int i = 0; i < number; i++) {

final Button button = new Button(context);

//如需修改button的text則可通過btns數組操作

button.setText((i + 1) + "年");

LinearLayout.LayoutParams params = new

LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT);

//button的間隔,這里是默認水平排列方式,所以只寫了left,right的margin

//如果為豎直排列的話,則修改top,bottom

params.setMargins(20, 0, 20, 0);

params.weight = 1;

//設置button的點擊效果

button.setBackgroundResource(R.drawable.selector_radio_btn);

//button.setMinHeight((int) DensityUtils.px2dp(context, 20));

button.setGravity(Gravity.CENTER);

btns[i] = button;

button.setTag(i);

if (i == 0) {

button.setSelected(true);

}

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View view) {

//該button選中

view.setSelected(true);

//其他button則要修改為未選中

setSelectedFalse((int) view.getTag());

//當前選中的位置

selectedPosition = (int) view.getTag();

if (mRadioBtnOnClick != null) {

mRadioBtnOnClick.click((int) view.getTag());

}

}

});

addView(button, params);

}

}

//獲取當前選中的位置

public int getSelectedPosition() {

return this.selectedPosition;

}

//設置當前選中的位置

public void setSelectedPosition(int position) {

btns[position].setSelected(true);

setSelectedFalse(position);

this.selectedPosition = position;

}

//修改未選中button的狀態

private void setSelectedFalse(int selectedPosition) {

for (int i = 0; i < btns.length; i++) {

if (i == selectedPosition)

continue;

if (btns[i] != null)

btns[i].setSelected(false);

}

}

//供外部設置button監聽事件

public void setRadioBtnOnClick(RadioBtnOnClick radioBtnOnClick) {

this.mRadioBtnOnClick = radioBtnOnClick;

}

//button點擊接口

public interface RadioBtnOnClick {

void click(int position);

}

}

下面貼上button點擊效果的xml文件,讀者可隨意修改,可控制button的形狀,邊框,顏色等等。

selector_radio_btn.xml

color.xml

#ff7F7F7F

#fffed000

#ffffffff

總結

以上是生活随笔為你收集整理的android自定义radiogroup,Android自定义RadioGroup的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。