首页 > 其他分享 >扩展LinearLayout以及从xml中加载menu,selector的使用

扩展LinearLayout以及从xml中加载menu,selector的使用

时间:2023-06-20 17:01:13浏览次数:36  
标签:xml anim return menu selector MENU Menu public


在包.com.test1.android.anim中 为什么单独写这个包名要用到

public class SlidingPanel extends LinearLayout {
	private int speed=300;
	private boolean isOpen=false;
	
	public SlidingPanel(final Context ctxt, AttributeSet attrs) {
		super(ctxt, attrs);
		
		TypedArray a=ctxt.obtainStyledAttributes(attrs,R.styleable.SlidingPanel,0, 0);
		
		speed=a.getInt(R.styleable.SlidingPanel_speed, 300);
		
		a.recycle();
	}
	
	public void toggle() {
		TranslateAnimation anim=null;
		
		isOpen=!isOpen;
		
		if (isOpen) {
			setVisibility(View.VISIBLE);
			anim=new TranslateAnimation(0.0f, 0.0f,getLayoutParams().height,0.0f);
		}
		else {
			anim=new TranslateAnimation(0.0f, 0.0f, 0.0f,getLayoutParams().height);
			anim.setAnimationListener(collapseListener);
		}
		
		anim.setDuration(speed);
		anim.setInterpolator(new AccelerateInterpolator(1.0f));
		startAnimation(anim);
	}
	
	Animation.AnimationListener collapseListener=new Animation.AnimationListener() {
		public void onAnimationEnd(Animation animation) {
			setVisibility(View.GONE);
		}
		
		public void onAnimationRepeat(Animation animation) {
			// not needed
		}
		
		public void onAnimationStart(Animation animation) {
			// not needed
		}
	};
}

 

上面扩展了一个linearLayout,正如你看见的 家红线的部分说明 我要建立一个自己的xml属性,这个xml在values/attrs/下

<resources>
	<declare-styleable name="SlidingPanel">
		<attr name="speed" format="integer" />
		<attr name="targetHeight" format="dimension" />
	</declare-styleable>
</resources>

 在这个属性中 我建立一个速度 用来指示动画的快慢,制定一个高度 用来显示空间的高。

然后就是红色部分的调用,一定要注意引用的方法。

这里没有进行if判断 来指定这是一个必须的属性,所以默认是可以缺省的属性。

然后我就可以把扩展linearLayout加入到main中了

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:app="http://schemas.android.com/apk/res/com.commonsware.android.anim"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	>
	<com.commonsware.android.anim.SlidingPanel
		android:id="@+id/panel"
		android:layout_width="fill_parent"
		android:layout_height="75px"
		android:orientation="horizontal"
		app:speed="250"
		app:targetHeight="75px"
		android:visibility="gone"
		android:background="#22FFFFFF"
		android:layout_alignParentBottom="true"
		>
		<Button
			android:layout_width="0px"
			android:layout_weight="1"
			android:layout_height="75px"
			android:text="Button #1"
		/>
		<Button
			android:layout_width="0px"
			android:layout_weight="1"
			android:layout_height="75px"
			android:text="Button #2"
		/>
		<Button
			android:layout_width="0px"
			android:layout_weight="1"
			android:layout_height="75px"
			android:text="Button #3"
		/>
	</com.commonsware.android.anim.SlidingPanel>
</RelativeLayout>

app:targetHeight="75px"修改这句话时 可能不会出现效果。
主程序就很简单了:

public class SlidingPanelDemo extends Activity {
	SlidingPanel panel=null;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		panel=(SlidingPanel)findViewById(R.id.panel);
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		new MenuInflater(getApplication()).inflate(R.menu.option, menu);

		return(super.onCreateOptionsMenu(menu));
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		if (item.getItemId()==R.id.toggle) {
			panel.toggle();
			
			return(true);
		}
		
		return(super.onOptionsItemSelected(item));
	}
}

 res/menu/option

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
	<item android:id="@+id/toggle"
		android:title="Toggle Panel"
		android:icon="@drawable/ic_menu_preferences" />
</menu>

 

这里使用了从xml中加入代码。

当然整个程序还是用了动画效果,尤其是一个动画监听器。

附件中我把上面的两个button换成了checkBox和一个可以换颜色的button

为了比较加载menu不同情况 下面是从代码中加载menu

private static final int MENU_SEARCH = Menu.FIRST; 
private static final int MENU_PREFERENCES = Menu.FIRST + 1; 
private static final int MENU_HELP = Menu.FIRST + 2; 
 
/* Creates the menu items */ 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    menu.add(Menu.NONE, MENU_SEARCH, Menu.NONE, "Search") 
            .setIcon(android.R.drawable.ic_menu_search); 
    menu.add(Menu.NONE, MENU_PREFERENCES, Menu.NONE, "Preferences") 
            .setIcon(android.R.drawable.ic_menu_preferences); 
    menu.add(Menu.NONE, MENU_HELP, Menu.NONE, "Help") 
            .setIcon(android.R.drawable.ic_menu_help); 
    return true; 
} 
 
/* Handles item selections */ 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
        case MENU_SEARCH: 
            search(); 
            return true; 
        case MENU_PREFERENCES: 
            preferences(); 
            return true; 
        case MENU_HELP: 
            showHelp(); 
            return true; 
    } 
 
    return super.onMenuItemSelected(featureId, item); 
}

 

标签:xml,anim,return,menu,selector,MENU,Menu,public
From: https://blog.51cto.com/u_16166892/6523980

相关文章

  • mybatis在mapper.xml中怎么处理大于、小于、不等于号
    第一种方法:使用转义字符大于号>>大于等于号 >= >=小于号 < < 小于等于号 <= <=与 & &amp;双引号 " "单引号 ' &apos;例子: <iftest="beginTimeStr!=null">  andfile.created_at>='${beginTimeStr}'</if>......
  • Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[2,6] Me
     报错如下:Causedby:javax.xml.stream.XMLStreamException:ParseErrorat[row,col]:[2,6]Message:不允许有匹配"[xX][mM][lL]"的处理指令目标。原因:xml第一行为空行,所以报错 需要将<?xmlversion="1.0"encoding="utf-8"?>放在第一行即可解决问题  ......
  • idea mule app pom.xml
    完整配置直接引用官方仓库点击查看代码<?xmlversion="1.0"encoding="UTF-8"standalone="no"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • xml
    XML简介可扩展(自定义){例如html中的标记是htmlheadbody;但是xml可以不用这个固定的标记,我可以自己定义标记}标记[<>]特点:可以跨平台,跨语言/系统传递{c++,c语言传过来,我可以用xml转成java作用:传递数据,框架/应用程序使用xml进行参数配置。XML文档结构<?xmlversion="1.0"encodin......
  • nodeSelector + deamonset
    DaemonSet配置文件的语法和结构与Deployment几乎完全一样,只是将 kind 设为 DaemonSet。选择运行节点:当指定.spec.template.spec.nodeSelector,DaemonSet将会在匹配的节点上创建pod。如果都没有指定,DaemonSet在所有node节点上创建pod. spec:  nodeSelector:.com/role:dev......
  • el-menu字段太长不换行
    .el-submenu__title{display:flex;align-items:center;}.el-submenu__titlespan{white-space:normal;word-break:break-all;line-height:20px;flex:1;padding-right:20px;}.el-menu-item{display:flex;align-items:center;pa......
  • 2023-06-19 API `getMenuButtonBoundingClientRect` is not yet implemented
    前言:想使用该Api来获取设备导航栏高度,结果报错了:API`getMenuButtonBoundingClientRect`isnotyetimplemented尚未实现API`getMenuButtonBoundingClientRect`原因:该Api不支持在app端或者h5端使用。平台兼容如下: AppH5微信小程序支付宝小程序百度小程序抖音小程序飞书小......
  • java 聚合项目--pom.xml配置文件
    java聚合项目创建聚合项目的2种方式:分层项目开发:1.DAO:java工程项目;(mavenquickstart)2.Service:java工程项目;(mavenquickstart)3.模型:java工程项目;(mavenquickstart)4.共工模块:java工程项目;(mavenquickstart)5.controller+view:webapp:web工程项目(mavenwebapp)工程类型:packing......
  • updateTimelineShareData,onMenuShareTimeline不显示分享图片和标题,不要从网址直接打开
    updateTimelineShareData,onMenuShareTimeline不显示分享图片和标题,不要从网址直接打开,要从公众号菜单里进去再分享。原文地址:http://www.xiaoyebailong.com/index.php/2022/01/04/68981.htm这个是官方分享接口地址https://developers.weixin.qq.com/doc/offiaccount/OA_Web_App......
  • js拦截XMLHttpRequest
    需要做一个扩展,拦截XMLHttpRequest,修改response里面部分值,查阅资料后一般是通过下面方法拦截letoldOpen=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(method,url,async,user,password){//拦截open//console.log(url)retu......