首页 > 其他分享 >linearlayout继承扩展篇

linearlayout继承扩展篇

时间:2023-06-20 17:00:44浏览次数:33  
标签:bar 继承 max void 扩展 Meter public linearlayout View


前面写了一个一个linearLayout,只不过那个只是继承了一个属性,在群聊的时候有人问 想在扩展的时候添加几个按钮,作为一个封装用,于是我就试了一下效果还不错:我做了一个人工的进度条 可以加可以减

主函数很简单就一句话setContentView(R.layout.main);

相比大家都明白所有的东西 都在main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:app="http://schemas.android.com/apk/res/co.android.widget"
	android:orientation="horizontal"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:paddingTop="5px"
>
	<TextView	
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content" 
		android:text="Meter:"
	/>
	<com.commonsware.android.widget.Meter
		android:id="@+id/meter"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		app:max="100"
		app:incr="1"
		app:decr="5"
	/>																			
</LinearLayout>。红色部分是我自己加的属性啊 ,一定注意包名co.android.widget

 

通过上面可以看到 没有prossbar,也没有加喝减的按钮啊,其实想想就知道了全在co.android.widget.Meter这里面。

那么就来看看Meter里面有啥:

public class Meter extends LinearLayout {
	private int max=100;
	private int incrAmount=1;
	private int decrAmount=-1;
	private ProgressBar bar=null;
	private View.OnClickListener onIncr=null;
	private View.OnClickListener onDecr=null;
	
	public Meter(final Context ctxt, AttributeSet attrs) {
		super(ctxt, attrs);
		
		this.setOrientation(HORIZONTAL);
		
		TypedArray a=ctxt.obtainStyledAttributes(attrs,R.styleable.Meter,0, 0);
		
		max=a.getInt(R.styleable.Meter_max, 100);
		incrAmount=a.getInt(R.styleable.Meter_incr, 1);
		decrAmount=-1*a.getInt(R.styleable.Meter_decr, 1);
		
		a.recycle();
	}
	/*
	public void setOnIncrListener(View.OnClickListener onIncr) {
		this.onIncr=onIncr;
	}
	
	public void setOnDecrListener(View.OnClickListener onDecr) {
		this.onDecr=onDecr;
	}
	
	public void setProgress(int progress) {
		bar.setProgress(progress);
	}
	
	public void setMax(int max) {
		this.max=max;
		bar.setMax(max);
	}
	*/
	@Override
	protected void onFinishInflate() {
		super.onFinishInflate();
		
		((Activity)getContext()).getLayoutInflater().inflate(R.layout.meter, this);
		
		bar=(ProgressBar)findViewById(R.id.bar);
		bar.setMax(max);
		
		ImageButton btn=(ImageButton)findViewById(R.id.incr);
		
		btn.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				bar.incrementProgressBy(incrAmount);
				
				if (onIncr!=null) {
					onIncr.onClick(Meter.this);
				}
			}
		});
		
		btn=(ImageButton)findViewById(R.id.decr);
		
		btn.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				bar.incrementProgressBy(decrAmount);
				
				if (onDecr!=null) {
					onDecr.onClick(Meter.this);
				}
			}
		});
	}
}

 我用不同颜色标注的部分 自己悟吧,就是怎么引用自定义属性。

你如果和上一篇比较就知道了 就多了一个onFinishInflate()   在这个方法中引用了另一个xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
>
	<ImageButton android:id="@+id/decr"
		android:layout_height="30px"
		android:layout_width="30px"
		android:src="@drawable/decr"
	/>
	<ProgressBar android:id="@+id/bar"
		style="?android:attr/progressBarStyleHorizontal"
		android:layout_width="0px"
		android:layout_weight="1"
		android:layout_height="wrap_content"
	/>
	<ImageButton android:id="@+id/incr"
		android:layout_height="30px"
		android:layout_width="30px"
		android:src="@drawable/incr"
	/>
</LinearLayout>

 

attr就很简单了

<resources>
	<declare-styleable name="Meter">
		<attr name="max" format="integer" />
		<attr name="incr" format="integer" />
		<attr name="decr" format="integer" />
	</declare-styleable>
</resources>

 

标签:bar,继承,max,void,扩展,Meter,public,linearlayout,View
From: https://blog.51cto.com/u_16166892/6523983

相关文章

  • 三菱FX3U 3轴控制 fx3u PLC,3轴控制,以太网扩展模块,用于与主站PLC通
    三菱FX3U3轴控制fx3uPLC,3轴控制,以太网扩展模块,用于与主站PLC通讯,梯形图编程(非结构化编程),程序3千多步资料包含:1.PLC程序2.触摸屏程序(威纶)3.CAD图纸4.io表三菱FX3U是一种PLC(可编程逻辑控制器),它具有3轴控制功能。它还可以通过以太网扩展模块与主站PLC进行通信。该PLC使用梯形图编程......
  • 三菱plc和三菱E700变频器专用协议通讯程序。 三菱E700变频器不加扩展时
    三菱plc和三菱E700变频器专用协议通讯程序。三菱E700变频器不加扩展时支持两种协议,此款采用专用协议,可以实现控制正反转,停止,频率设定,频率加减速,以及对频率的读取,效果可以看视频。三菱d700参数设置,效果是一样的三菱PLC和三菱E700变频器之间的通讯可以通过一个专门的协议来实现。当......
  • 如何实施可扩展性测试?
    可扩展性测试旨在验证系统或应用程序在面对增大的负载和用户数量时,能够保持性能、吞吐量和响应时间的稳定性和可伸缩性。以下是进行可扩展性测试的一般步骤:定义测试目标和指标:明确要测试的系统或应用程序的可扩展性需求,并定义相应的性能指标,如响应时间、吞吐量和并发用户数等。性能......
  • 如何实施可扩展性测试?
    可扩展性测试旨在验证系统或应用程序在面对增大的负载和用户数量时,能够保持性能、吞吐量和响应时间的稳定性和可伸缩性。以下是进行可扩展性测试的一般步骤:定义测试目标和指标:明确要测试的系统或应用程序的可扩展性需求,并定义相应的性能指标,如响应时间、吞吐量和并发用户数等。......
  • C++继承和派生
    #继承和派生在C++中,继承和派生是面向对象编程的两个重要概念,用于实现类与类之间的关系。继承是指一个类可以从另一个类中继承属性和方法,并且可以在此基础上扩展出自己的属性和方法。被继承的类称为基类(父类),继承的类称为派生类(子类)。在C++中,可以通过以下方式定义一个派生类:```c++cl......
  • Docker PHP如何安装mysqli扩展
    查找用于安装PHP扩展的命令文件whichdocker-php-ext-install安装mysqli扩展docker-php-ext-installmysqli需要注意的是,docker-php-ext-install命令仅适用于基于PHP的Docker镜像,并且需要与DockerCompose文件一起使用,以便在容器中运行PHP应用程序。......
  • python3 面向对象编程--类的封装和继承
    #python3importrefromurllibimportrequestimportosclassPosterSpider(object):def__init__(self,path='./'):self.path=path#theentryofthisprocessdefgetStart(self,url):page=self.reqPage(url)......
  • POSTGRESQL analyze table 到底做了什么与扩展统计
    PostgreSQL 中对表的状态是有单独的命令来进行状态的收集的,到底怎么对表来进行状态的收集,并且都做了什么,我们怎么来依靠这些信息来对查询进行有益的帮助。这些都将在这篇文章里面探讨。首先我们对PG12中,关于Analyze 的注释来仔细的阅读一遍ANALYZE collectsstatisticsabout......
  • 事务扩展机制TransactionSynchronization
    事务扩展机制TransactionSynchronization在进行数据库操作的时候,如果需要多个操作要么一起成功,要么一起失败那么就需要使用事务操作了。使用Spring框架只需要在方法上添加 @Transactional 注解这个方法就具有事务特性了。而且Spring也事务操作给开发者提供了很方便的扩展......
  • 关于Cloud-磁盘-分区-物理边界的扩展-扩容
    对于一块磁盘,一般来说,是需要进行分区(也有直接对磁盘进行格式化的情况)、然后创建文件系统后,挂载到系统中才能使用 要扩容,这样主要就是分为两种情况1、对于整块磁盘、创建了文件系统的,想对其扩容2、对于分区,创建了文件系统的,想对其扩容 对于整块磁盘文件系统的扩容,方法比较......