Android自定义控件

合集下载

Android中自定义控件TextSize属性问题

Android中自定义控件TextSize属性问题

Android中⾃定义控件TextSize属性问题本⽂主要说明⼀个⾃定义控件添加TextSize属性的坑,刚刚从坑⾥⾯爬出来,写个随笔,记录⼀下;*****************************************************************今天⾃⼰在摸索Android的⾃定义控件,然后给控件添加了⼀个修改字体的属性:<declare-styleable name="BannerView"><attr name="indicator_item_text_size" format="dimension"/></declare-styleable>然后在控件代码中的获取如下:private void init(Context context, AttributeSet attrs, int defStyleAttr) {this.setLayoutParams(new LayoutParams(youtParams.MATCH_PARENT, youtParams.MATCH_PARENT)); View rootView = LayoutInflater.from(context).inflate(yout.banner_view_layout, this, true);currentTV = (TextView) rootView.findViewById(R.id.introduce_tv);TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.BannerView, defStyleAttr, 0);indicatorTextSize = typedArray.getDimensionPixelSize(R.styleable.BannerView_indicator_item_text_size, 16);typedArray.recycle();currentTV.setTextSize(indicatorTextSize);}欧了,启动app,结果,狗眼瞎了,⽂字字体⽐预计的要⼤很多,懵逼了!~终于知道为什么了:上⾯那⾏代码改⼀下:currentTV.setTextSize(PLEX_UNIT_PX, indicatorTextSize);看⼀下截图,多么痛的领悟:。

Android自定义Toast宽度无法设置问题解决

Android自定义Toast宽度无法设置问题解决

Android⾃定义Toast宽度⽆法设置问题解决在项⽬中想要实现⼀个头部的toast提⽰效果,类似下图再实现的过程中发现,如果直接通过修改Toast的View布局的⽗控件宽度是⽆法实现效果的,后来是通过直接⽤代码指定⽗控件内部的textview的宽度实现了。

下⾯是具体的代码:private static void makeToast(String msg) {if (toastView == null) {LayoutInflater inflater = (LayoutInflater) AppApplication.getInstance().getSystemService(YOUT_INFLATER_SERVICE);params = new youtParams(AppApplication.mScreenWidth, youtParams.MATCH_PARENT);toastView = inflater.inflate(yout.toast_custom_prompt, null);}TextView tv = (TextView) toastView.findViewById(TitleToast);tv.setLayoutParams(params);tv.setText(msg);toast = new Toast(AppApplication.getInstance());float hOffset = AppApplication.getInstance().getResources().getDimension(mon_title_height);toast.setGravity(Gravity.TOP, 0, (int) hOffset);toast.setDuration(Toast.LENGTH_LONG);toast.setView(toastView);toast.show();}上⾯的⽅式使⽤到了我⾃⼰写的⼀个计算屏幕宽⾼的⼩⽅法:private void calcScreenSize() {DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);mScreenWidth = dm.widthPixels;mScreenHeight = dm.heightPixels;AppApplication.mScreenWidth = mScreenWidth;AppApplication.mScreenHeight = mScreenHeight;}通过上⾯的步骤就能在标题栏下⽅显⽰⼀个⾃定义的toast提⽰。

修改preferencecategory的宽高

修改preferencecategory的宽高

修改preferencecategory的宽高如何修改PreferenceCategory 的宽高?PreferenceCategory 是Android 中的一个可自定义的控件,用于在应用程序的设置界面中创建一个可分组的选项类别。

默认情况下,PreferenceCategory 的宽高是自适应的,与包含它的父容器保持一致。

然而,有时候我们可能需要手动修改PreferenceCategory 的宽高,以满足特定的界面设计需求。

接下来,我将一步一步地介绍如何修改PreferenceCategory 的宽高。

步骤一:了解布局文件结构首先,我们需要了解用于显示设置界面的布局文件的结构。

通常,设置界面使用一个或多个PreferenceFragment 来显示相关的设置选项。

PreferenceFragment 是一个特殊的Fragment,它负责加载和管理Preference 的显示。

布局文件通常包含一个包含PreferenceFragment 的容器布局,如FrameLayout 或LinearLayout。

在这个容器布局中,再添加一个或多个PreferenceCategory 控件来创建设置选项的不同类别。

步骤二:定义自定义PreferenceCategory 样式要修改PreferenceCategory 的宽高,我们需要定义一个自定义的样式。

在res/values/styles.xml 文件中,添加以下代码:xml<style name="CustomPreferenceCategory"parent="Preference.Category"><item name="android:layout_width">200dp</item><item name="android:layout_height">50dp</item></style>上述代码中的CustomPreferenceCategory 是我们自定义的样式名称,继承自Preference.Category。

Android自定义View控件实现刷新效果

Android自定义View控件实现刷新效果

Android⾃定义View控件实现刷新效果三种得到LinearInflater的⽅法a. LayoutInflater inflater = getLayoutInflater();b. LayoutInflater localinflater =(LayoutInflater)context.getSystemService(YOUT_INFLATER_SERVICE);c. LayoutInflater inflater = LayoutInflater.from(context);onDraw ⽅法绘图,invalidate刷新界⾯。

效果图:点击⼀下换颜⾊onDraw画完图后,给控件设置点击事件 ,将参数传到控件⾥,然后invalidate刷新1.onDraw画图,并增加changeColor⽅法public class CusView3 extends View {private int color = 0;public CusView3(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint mPaint = new Paint();if (color > 2) {color = 0;}switch (color) {case 0:mPaint.setColor(Color.GREEN);break;case 1:mPaint.setColor(Color.RED);break;case 2:mPaint.setColor(Color.BLUE);break;default:break;}mPaint.setStyle(Style.FILL);mPaint.setTextSize(35.0f);canvas.drawText("点击我刷新", 10, 60, mPaint);}public void changeColor() { //为了让外⾯调⽤color++;}}2.布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><xue.test.CusView3android:id="@+id/cusview3"android:layout_width="wrap_content"android:layout_height="wrap_content"></xue.test.CusView3></LinearLayout>3.画图后给控件设置点击事件 ,将参数传到控件⾥,然后invalidate刷新public class TestCustomViewActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);view3 = (CusView3) findViewById(R.id.cusview3);// 点击事件view3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Message message = new Message();message.what = 1;myHandler.sendMessage(message);}});}Handler myHandler = new Handler() {// 接收到消息后处理public void handleMessage(Message msg) {switch (msg.what) {case 1:// 调⽤⽅法view3.changeColor();// 刷新⽅法view3.invalidate();break;}super.handleMessage(msg);}};private CusView3 view3;}⾄于⾃定义控件占整屏的问题,可能需要⽤layoutparams以上所述是⼩编给⼤家介绍的Android⾃定义View控件实现刷新效果,希望对⼤家有所帮助,如果⼤家有任何疑问欢迎给我留⾔,⼩编会及时回复⼤家的!。

AndroidUI控件RatingBar实现自定义星星评分效果

AndroidUI控件RatingBar实现自定义星星评分效果

AndroidUI控件RatingBar实现⾃定义星星评分效果本⽂实例为⼤家分享了Android RatingBar星星评分效果的具体代码,供⼤家参考,具体内容如下继承关系AppCompatRatingBar效果图xml<RatingBarstyle="@android:style/Widget.DeviceDefault.RatingBar.Small"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:isIndicator="false"android:numStars="5"android:rating="2.5"android:stepSize="0.5"/>上⾯这些属性也可以⽤java代码设置。

点击事件点击事件中可以处理我们⾃⼰的逻辑。

不给ratingbar添加监听,点击他也会变化ratingBar = (RatingBar) findViewById(R.id.ratingBar);ratingBar.setRating(3.5f);ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {@Overridepublic void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {if (fromUser) {//fromUser rating数量是否发⽣改变ratingBar.setRating(rating);}Log.d(TAG, "rating=" + ratingBar.getRating());Log.d(TAG, "fromUser=" + fromUser);}});以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

Android自定义SeekBar实现视频播放进度条

Android自定义SeekBar实现视频播放进度条

Android⾃定义SeekBar实现视频播放进度条本⽂实例为⼤家分享了Android实现视频播放进度条的具体代码,供⼤家参考,具体内容如下⾸先来看⼀下效果图,如下所⽰:其中进度条如下:接下来说⼀说我的思路,上⾯的进度拖动条有⾃定义的Thumb,在Thumb正上⽅有⼀个PopupWindow窗⼝,窗⼝⾥⾯显⽰当前的播放时间。

在SeekBar右边有⼀个⽂本框显⽰当前播放时间/总时间。

step1、先来看⼀看PopupWindow的布局⽂件,seek_popu.xml,效果如下图所⽰:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/seek_dialog_bg" ><!-- 展现当前播放进度时间的⽂本框--><TextViewandroid:id="@+id/dialogSeekTime"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dip"android:layout_marginTop="12dip"android:text="@string/unknow_seek_time"android:textColor="@color/black"android:textSize="12sp" /></RelativeLayout>step2、⾃定义⼀个SeekBarimport com.canplay.video.R;import android.content.Context;import android.util.AttributeSet;import youtInflater;import android.view.View;import android.widget.PopupWindow;import android.widget.SeekBar;import android.widget.TextView;/*** ⾃定义进度拖动条控件*/public class MySeekBar extends SeekBar {/*** 定义⼀个展现时间的PopupWindow*/private PopupWindow mPopupWindow;private View mView;/*** 显⽰时间的TextView*/private TextView dialogSeekTime;/*** ⽤来表⽰该组件在整个屏幕内的绝对坐标,其中 mPosition[0] 代表X坐标,mPosition[1] 代表Y坐标。

对Android的整体理解

对Android的整体理解
那么内存溢出出现的大部分原因回事因为图片加载问题:
这时候就涉及到了三级缓存的问题
三级缓存机制: 内存缓存,本地缓存,网络缓存(异步任务)
在内存缓存的时候 会把图片保存在map集合中 由于安卓中默认是强引用
在这个时候 安卓中的垃圾回收机制就没有了作用(每个图片都有一个引用指向着它),
(4).采用监听器监听图片加载过程及相应事件的处理;
(5).配置加载的图片显示选项,比如图片的圆角处理及渐变动画。
需要我们自己去绘画 定义控件该有的界面 以及点击事件其他的
界面维护好后 基本上剩下的就是封装网络请求,解析返回的数据 填充数据 加载图片
当然 可能还会存在一些 内存溢出(内存优化) 应用无响应 等异常 现在先解决一下 内存溢出的问题
内存溢出从源头上说就是内存优化不够 有些该回收 或者重复利用的内存没有回收或者利用
就拿MVC 模型来举例
安卓中主要就分那三大模块
模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。
视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。
控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给m层处理。
这些都是一些补间动画,并没有改变VIew的真实属性
其他的动画 当然还有属性动画ValueAnimator ViewHelper PropertiAnimator(NineOld包中) 等 差不多 我们常见的动画 就这么多
当然还有一些常用的布局 FrameLayout LinearLayout RelativeLayout

androidstudiolistview的用法

androidstudiolistview的用法

androidstudiolistview的用法1. 创建ListView控件要使用ListView,首先需要在布局文件中创建一个ListView控件。

在XML文件中,添加以下代码:```xml<ListView/>```2.创建数据源ListView的数据源是一个数组或集合,其中每个元素都对应列表中的一个数据项。

通常情况下,我们会将数据存储在一个数组或集合中。

```javaString[] data = {"Item 1", "Item 2", "Item 3"};```3.创建适配器适配器是ListView的关键组件,它负责将数据源中的数据与列表项的布局进行绑定。

我们可以使用BaseAdapter或ArrayAdapter来创建适配器。

```javaArrayAdapter<String> adapter = new ArrayAdapter<String>(this, yout.simple_list_item_1, data);```4.设置适配器将适配器设置给ListView:```javaListView listView = findViewById(R.id.list);listView.setAdapter(adapter);```5.设置列表项点击事件我们可以为ListView的每个列表项设置点击事件。

只需要为ListView设置OnItemClickListener即可。

```javalistView.setOnItemClickListener(newAdapterView.OnItemClickListenepublic void onItemClick(AdapterView<?> parent, View view,int position, long id)//处理点击事件}});```6.自定义列表项布局如果想要自定义列表项的布局,可以创建一个自定义的布局文件,并在适配器中指定该布局。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

今天和大家分享下组合控件的使用。

很多时候android自定义控件并不能满足需求,如何做呢?很多方法,可以自己绘制一个,可以通过继承基础控件来重写某些环节,当然也可以将控件组合成一个新控件,这也是最方便的一个方法。

今天就来介绍下如何使用组合控件,将通过两个实例来介绍。

第一个实现一个带图片和文字的按钮,如图所示:整个过程可以分四步走。

第一步,定义一个layout,实现按钮内部的布局。

代码如下:1.<?xml version="1.0"encoding="utf-8"?>2.<LinearLayout xmlns:android="/apk/res/android"3.android:orientation="horizontal"4.android:layout_width="fill_parent"5.android:layout_height="fill_parent"6.>7.<ImageView8.android:layout_width="wrap_content"9.android:layout_height="wrap_content"10.android:id="@+id/iv"11.android:src="@drawable/confirm"12.android:paddingTop="5dip"13.android:paddingBottom="5dip"14.android:paddingLeft="40dip"15.android:layout_gravity="center_vertical"16./>17.<TextView18.android:layout_width="wrap_content"19.android:layout_height="wrap_content"20.android:text="确定"21.android:textColor="#000000"22.android:id="@+id/tv"23.android:layout_marginLeft="8dip"24.android:layout_gravity="center_vertical"25./>26.</LinearLayout>这个xml实现一个左图右字的布局,接下来写一个类继承LinearLayout,导入刚刚的布局,并且设置需要的方法,从而使的能在代码中控制这个自定义控件内容的显示。

代码如下:1.package com.notice.ib;2.3.import android.content.Context;4.import android.util.AttributeSet;5.import youtInflater;6.import android.widget.ImageView;7.import android.widget.LinearLayout;8.import android.widget.TextView;9.10.public class ImageBt extends LinearLayout {11.12.private ImageView iv;13.private TextView tv;14.15.public ImageBt(Context context) {16.this(context, null);17. }18.19.public ImageBt(Context context, AttributeSet attrs) {20.super(context, attrs);21.// 导入布局22. LayoutInflater.from(context).inflate(yout.custombt, this, true);23. iv = (ImageView) findViewById(R.id.iv);24. tv = (TextView) findViewById();25.26. }27.28./**29. * 设置图片资源30. */31.public void setImageResource(int resId) {32. iv.setImageResource(resId);33. }34.35./**36. * 设置显示的文字37. */38.public void setTextViewText(String text) {39. tv.setText(text);40. }41.42.}第三步,在需要使用这个自定义控件的layout中加入这控件,只需要在xml中加入即可。

方法如下:1.<RelativeLayout2.android:orientation="horizontal"3.android:layout_width="fill_parent"4.android:layout_height="wrap_content"5.android:layout_gravity="bottom"6.>7.<com.notice.ib.ImageBt8.android:id="@+id/bt_confirm"9.android:layout_height="wrap_content"10.android:layout_width="wrap_content"11.android:layout_alignParentBottom="true"12.android:background="@drawable/btbg"13.android:clickable="true"14.android:focusable="true"15./>16.<com.notice.ib.ImageBt17.android:id="@+id/bt_cancel"18.android:layout_toRightOf="@id/bt_confirm"19.android:layout_height="wrap_content"20.android:layout_width="wrap_content"21.android:layout_alignParentBottom="true"22.android:background="@drawable/btbg"23.android:clickable="true"24.android:focusable="true"25./>26.</RelativeLayout>注意的是,控件标签使用完整的类名即可。

为了给按钮一个点击效果,你需要给他一个selector背景,这里就不说了。

最后一步,即在activity中设置该控件的内容。

当然,在xml中也可以设置,但是只能设置一个,当我们需要两次使用这样的控件,并且显示内容不同时就不行了。

在activity中设置也非常简单,我们在ImageBt这个类中已经写好了相应的方法,简单调用即可。

代码如下:1.public class MainActivity extends Activity {2.3.private ImageBt ib1;4.private ImageBt ib2;5.6./** Called when the activity is first created. */7.@Override8.public void onCreate(Bundle savedInstanceState) {9.super.onCreate(savedInstanceState);10. setContentView(yout.login);11.12. ib1 = (ImageBt) findViewById(R.id.bt_confirm);13. ib2 = (ImageBt) findViewById(R.id.bt_cancel);14.15. ib1.setTextViewText("确定");16. ib1.setImageResource(R.drawable.confirm);17. ib2.setTextViewText("取消");18. ib2.setImageResource(R.drawable.cancel);19.20. ib1.setOnClickListener(new OnClickListener() {21.22.@Override23.public void onClick(View v) {24.//在这里可以实现点击事件25. }26. });27.28. }29.}这样,一个带文字和图片的组合按钮控件就完成了。

这样梳理一下,使用还是非常简单的。

组合控件能做的事还非常多,主要是在类似上例中的ImageBt类中写好要使用的方法即可。

再来看一个组合控件,带删除按钮的EidtText。

即在用户输入后,会出现删除按钮,点击即可取消用户输入。

定义方法和上例一样。

首先写一个自定义控件的布局:1.<?xml version="1.0"encoding="utf-8"?>2.<RelativeLayout xmlns:android="/apk/res/android"3.android:layout_width="fill_parent"4.android:layout_height="fill_parent"5.>6.<EditText7.android:id="@+id/et"8.android:layout_width="fill_parent"9.android:layout_height="wrap_content"10.android:singleLine="true"11./>12.<ImageButton13.android:id="@+id/ib"14.android:visibility="gone"15.android:src="@drawable/menu_delete"16.android:layout_width="wrap_content"17.android:layout_height="wrap_content"18.android:background="#00000000"19.android:layout_alignRight="@+id/et"/>20.</RelativeLayout>实现输入框右侧带按钮效果,注意将按钮隐藏。

相关文档
最新文档