Android开发仿咸鱼键盘DEMO(修改版)

在这里布局我就不贴出来了

/**
* 最终被调用的修改价格dialog
*/
protected void editPriceDialog() {
// TODO Auto-generated method stub
editPriceView = View.inflate(this, R.layout.dialog_price_input_keyboard, null);
priceDialog = new Dialog(this, R.style.contactdialog);
priceDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Window PriceDialogwindow = priceDialog.getWindow();
PriceDialogwindow.setGravity(Gravity.BOTTOM);
priceDialog.setContentView(editPriceView);
priceDialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
priceDialog.show();
tv_softkb_point = (TextView) editPriceView.findViewById(R.id.tv_softkb_point);
buffer = new StringBuffer();
stringbuffer = buffer.toString();
buffer2 = new StringBuffer();
stringbuffer2 = buffer2.toString();
etGoodsPrice = (EditText) editPriceView.findViewById(R.id.et_goodsPrice);
etGoodsPrice.addTextChangedListener(new TextWatcher() {
private String etPricetrim;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
etPricetrim = s.toString().trim();
if (etPricetrim.length() == 1 && s.toString().equals(".")) { //如果edittext的长度为1并且用户只输入了一个.那么buffer里追加"0" + "." 同时删除我们输入的点
//如果不删除的在则 buffer里的数据会是 .0.
buffer.append("0").append(".").deleteCharAt(0);
etGoodsPrice.setText(buffer.toString());
}
if (s.toString().contains(".")) { //如果s里包含点
if (s.length() - 1 - s.toString().indexOf(".") > 2) {
if(tv_softkb_point!=null){
tv_softkb_point.setClickable(false);
}
if(buffer!=null&&buffer.length()>=1){
buffer.deleteCharAt(buffer.length()-1);
}
s = s.toString().subSequence(0, s.toString().indexOf(".") + 3);
etGoodsPrice.setText(s);
etGoodsPrice.setSelection(s.length());
}
else if(s.length()-1-s.toString().indexOf(".")<=2){
if(tv_softkb_point!=null){
tv_softkb_point.setClickable(false);
}
}
}
else {
if(tv_softkb_point!=null) {
tv_softkb_point.setClickable(true);
tv_softkb_point.setEnabled(true);
}
}
if (s.toString().startsWith("0") && s.toString().trim().length() > 1) { //如果以0开头长度大于1 第二个元素不是.
if (!s.toString().substring(1, 2).equals(".")) {
buffer.deleteCharAt(1);
etGoodsPrice.setText(s.subSequence(0, 1));
etGoodsPrice.setSelection(1);
return;
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
int length = etPricetrim.length();
if (length >=1) {
etGoodsPrice.setSelection(length);
} else {
etGoodsPrice.setSelection(0);
}
// Toast.makeText(PostIssueActivity.this,s.toString(), 0).show();
if(s.toString()!=null&&s.toString().contains(".")){ //通过s取出当前editext上的传 来判断是否包含. 如果包含的话则把 clickbale设置成false同时置为不可点击
if(tv_softkb_point!=null) {
tv_softkb_point.setClickable(false);
tv_softkb_point.setEnabled(false);
}
}
// if(s.toString().length()==1&&s.toString().equals("0")) { //如果长度是1 并且是以0开头 这个时候光标是定位在0后 则删除buffer
// //里的第一个char 并设置
//
//// buffer.deleteCharAt(0);
//// etGoodsPrice.setText(buffer.toString());
//
// }
}
});
if (!iPriceEdit.getText().toString().substring(1, iPriceEdit.getText().length()).toString().equals("0.00")) {
etGoodsPrice
.setText(iPriceEdit.getText().toString().substring(1, iPriceEdit.getText().length()).toString());
etGoodsPrice.setSelection(etGoodsPrice.length());
buffer.append(iPriceEdit.getText().toString().substring(1, iPriceEdit.getText().length()).toString());
} else {
etGoodsPrice.setText("");
etGoodsPrice.setHint("0.00");
buffer.append("");
}
etOriginalPrice = (EditText) editPriceView.findViewById(R.id.et_originalPrice);
etOriginalPrice.addTextChangedListener(new TextWatcher() {
private String trim;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
trim = s.toString().trim();
if (etOriginalPrice.length() == 1 && s.toString().equals(".")) {
buffer2.append("0").append(".").deleteCharAt(0);
etOriginalPrice.setText(buffer2.toString());
}
if (s.toString().contains(".")) {
if (s.length() - 1 - s.toString().indexOf(".") > 2) {
if(tv_softkb_point!=null){
tv_softkb_point.setClickable(false);
}
if(buffer2!=null&&buffer2.length()>=1){
buffer2.deleteCharAt(buffer2.length()-1);
}
s = s.toString().subSequence(0, s.toString().indexOf(".") + 3);
etOriginalPrice.setText(s);
etOriginalPrice.setSelection(s.length());
}
else if(s.length()-1-s.toString().indexOf(".")<=2){
if(tv_softkb_point!=null){
tv_softkb_point.setClickable(false);
}
}
}
else {
if(tv_softkb_point!=null) {
tv_softkb_point.setClickable(true);
tv_softkb_point.setEnabled(true);
}
}
if (s.toString().startsWith("0") && s.toString().trim().length() > 1) {
if (!s.toString().substring(1, 2).equals(".")) {
buffer2.deleteCharAt(1);
etOriginalPrice.setText(s.subSequence(0, 1));
etOriginalPrice.setSelection(1);
return;
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
int length = trim.length();
if (length >=1) {
etOriginalPrice.setSelection(length);
} else {
etOriginalPrice.setSelection(0);
}
if(s.toString()!=null&&s.toString().contains(".")){
if(tv_softkb_point!=null) {
tv_softkb_point.setClickable(false);
tv_softkb_point.setEnabled(false);
}
}
// if(s.toString().length()==1&&s.toString().equals("0")) { //如果长度是1 并且是以0开头 这个时候光标是定位在0后 则删除buffer
// //里的第一个char 并设置
//
// buffer2.deleteCharAt(0);
// etOriginalPrice.setText(buffer2.toString());
//
// }
}
});
etOriginalPrice.setSelection(etOriginalPrice.length());
if (!iOldPriceEdit.getText().subSequence(1, iOldPriceEdit.getText().length()).toString().equals("0.00")) {
etOriginalPrice
.setText(iOldPriceEdit.getText().subSequence(1, iOldPriceEdit.getText().length()).toString());
buffer2.append(iOldPriceEdit.getText().subSequence(1, iOldPriceEdit.getText().length()).toString());
} else {
etOriginalPrice.setText("");
etOriginalPrice.setHint("0.00");
buffer2.append("");
}
// etOriginalPrice.requestFocus();
// etOriginalPrice.setSelection(etGoodsPrice.getText().length());
ImageView tv_softkb_hiddenkb = (ImageView) editPriceView.findViewById(R.id.tv_softkb_hiddenkb);
ImageView ivDelete = (ImageView) editPriceView.findViewById(R.id.iv_delete);
ivDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(PostIssueActivity.this, "dddd", 0).show();
delNumber();
}
});
// 长按删除键 事件
ivDelete.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.delete(0, etGoodsPrice.getText().length());
// if(etGoodsPrice.getText().length()>=1){
// buffer.deleteCharAt(etGoodsPrice.getText().length()-1);
// }
stringbuffer = buffer.toString();
etGoodsPrice.setText(stringbuffer.substring(0, stringbuffer.length()));
}
if (etOriginalPrice.hasFocus()) {
buffer2.delete(0, etOriginalPrice.getText().length());
// if(etOriginalPrice.getText().length()>=1){
// buffer2.deleteCharAt(etOriginalPrice.getText().length()-1);
// }
stringbuffer2 = buffer2.toString();
etOriginalPrice.setText(stringbuffer2.substring(0, stringbuffer2.length()));
}
return false;
}
});
setNumber(buffer, buffer2, etGoodsPrice, etOriginalPrice);
tv_softkb_hiddenkb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
editPriceView.clearAnimation();
priceDialog.cancel();
}
});
TextView confirmKB = (TextView) editPriceView.findViewById(R.id.tv_confirmKB);
hiddenSoftKB(etGoodsPrice, etOriginalPrice);
confirmKB.setOnClickListener(new OnClickListener() {
@SuppressLint("NewApi")
@Override
public void onClick(View v) {
// iPriceEdit
// iOldPriceEdit
if (buffer != null) {
// iPriceEdit.setText("¥"+buffer.toString());
iPriceEdit.setText("¥" + etGoodsPrice.getText().toString());
if (etGoodsPrice.getText().toString().equals("")) {
iPriceEdit.setText("¥" + "0.00");
}
}
if (buffer2 != null) {
// iOldPriceEdit.setText("¥"+buffer2.toString());
iOldPriceEdit.setText("¥" + etOriginalPrice.getText().toString());
if (etOriginalPrice.getText().toString().equals("")) {
iOldPriceEdit.setText("¥" + "0.00");
}
}
if(etGoodsPrice.getText().toString().equals("")){
etGoodsPrice.setText("0.00");
}
if(etOriginalPrice.getText().toString().equals("")){
etOriginalPrice.setText("0.00");
}
if(Double.valueOf(etGoodsPrice.getText().toString())>Double.valueOf(etOriginalPrice.getText().toString())) {
// Toast.makeText(PostIssueActivity.this, "售价高于原价,是否确认?", 0).show();
PublicDialog PriceIsMaxDialog = PublicDialog.createDialog(PostIssueActivity.this, new DialogBtnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.public_dialog_cancel:
editPriceView.clearAnimation();
priceDialog.cancel();
break;
case R.id.public_dialog_confirm:
editPriceView.clearAnimation();
priceDialog.cancel();
break;
default:
break;
}
}
});
Window dialogwindow = PriceIsMaxDialog.getWindow();
Display display = getWindowManager().getDefaultDisplay();
WindowManager.LayoutParams lp = dialogwindow.getAttributes();
lp.width = (int) (display.getWidth() * 0.99);
dialogwindow.setAttributes(lp);
PriceIsMaxDialog.show();
LinearLayout llPublic = (LinearLayout) PriceIsMaxDialog.findViewById(R.id.ll_public_dialog);
llPublic.setBackground(getResources().getDrawable(R.drawable.public_dialog_botom_corner_shape_wite));
PriceIsMaxDialog.onWindowFocusChanged(true);
// View splitling = PriceIsMaxDialog.findViewById(R.id.v_line);
// splitling.setBackgroundColor(color.color_eaeaea);
PriceIsMaxDialog.setLineColor(Color.parseColor("#E9E9EB"));
PriceIsMaxDialog.setTitle("提示");
PriceIsMaxDialog.setContent("出价高于原价,是否确认?");
PriceIsMaxDialog.setTitleVisibility(true);
TextView contentView = PriceIsMaxDialog.getContentView();
contentView.setTextSize(16);
contentView.setGravity(Gravity.CENTER);
contentView.setPadding(0, 0, 0, 10);
android.view.ViewGroup.LayoutParams layout = contentView.getLayoutParams();
layout.width = lp.MATCH_PARENT;
layout.height = 120;
contentView.setLayoutParams(layout);
TextView publicdialogCancle = (TextView) PriceIsMaxDialog.findViewById(R.id.public_dialog_cancel);
publicdialogCancle.setText("否");
PriceIsMaxDialog.setCancelTextColor(Color.parseColor("#037BFE"));
// PriceIsMaxDialog.setCancelBackGround(Color.parseColor("#ffffff"));
// publicdialogCancle.setTextColor(color.app_green);
TextView publicdialogConfirm = (TextView) PriceIsMaxDialog.findViewById(R.id.public_dialog_confirm);
publicdialogConfirm.setText("是");
PriceIsMaxDialog.setConfirmTextColor(Color.parseColor("#037BFE"));
// PriceIsMaxDialog.setConfirmBackGround(Color.parseColor("#ffffff"));
// publicdialogConfirm.setTextColor(color.app_green);
// publicdialogConfirm.setBackground(getResources().getDrawable(R.drawable.coners_save_bg));
PriceIsMaxDialog.findViewById(R.id.vv_hor).setVisibility(View.VISIBLE);
}
editPriceView.clearAnimation();
priceDialog.cancel();
}
});
}
/**
* 删除输入的金额
*/
protected void delNumber() {
if (etGoodsPrice.hasFocus()) {
// buffer.delete(0, etGoodsPrice.getText().length());
if (etGoodsPrice.getText().length() >= 1) {
buffer.deleteCharAt(etGoodsPrice.getText().length() - 1);
// buffer.deleteCharAt(etGoodsPrice.getText().length());
}
stringbuffer = buffer.toString();
etGoodsPrice.setText(stringbuffer.substring(0, stringbuffer.length()));
etGoodsPrice.setSelection(etGoodsPrice.length());
}
if (etOriginalPrice.hasFocus()) {
// buffer2.delete(0,etOriginalPrice.getText().length());
if (etOriginalPrice.getText().length() >= 1) {
buffer2.deleteCharAt(etOriginalPrice.getText().length() - 1);
// buffer2.deleteCharAt(etOriginalPrice.getText().length());
}
stringbuffer2 = buffer2.toString();
etOriginalPrice.setText(stringbuffer2.substring(0, stringbuffer2.length()));
etOriginalPrice.setSelection(etOriginalPrice.length());
}
}
/**
* 输入金额
*
* @param buffer
* @param buffer2
* @param etGoodsPrice
* @param etOriginalPrice
*/
private void setNumber(final StringBuffer buffer, final StringBuffer buffer2, final EditText etGoodsPrice,
final EditText etOriginalPrice) {
TextView tv_softkb_1 = (TextView) editPriceView.findViewById(R.id.tv_softkb_1);
tv_softkb_1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.append("1");
etGoodsPrice.setText(buffer.toString());
}
if (etOriginalPrice.hasFocus()) {
buffer2.append("1");
etOriginalPrice.setText(buffer2.toString());
}
}
});
TextView tv_softkb_2 = (TextView) editPriceView.findViewById(R.id.tv_softkb_2);
tv_softkb_2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.append("2");
etGoodsPrice.setText(buffer.toString());
}
if (etOriginalPrice.hasFocus()) {
buffer2.append("2");
etOriginalPrice.setText(buffer2.toString());
}
}
});
TextView tv_softkb_3 = (TextView) editPriceView.findViewById(R.id.tv_softkb_3);
tv_softkb_3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.append("3");
etGoodsPrice.setText(buffer.toString());
}
if (etOriginalPrice.hasFocus()) {
buffer2.append("3");
etOriginalPrice.setText(buffer2.toString());
}
}
});
TextView tv_softkb_4 = (TextView) editPriceView.findViewById(R.id.tv_softkb_4);
tv_softkb_4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.append("4");
etGoodsPrice.setText(buffer.toString());
}
if (etOriginalPrice.hasFocus()) {
buffer2.append("4");
etOriginalPrice.setText(buffer2.toString());
}
}
});
TextView tv_softkb_5 = (TextView) editPriceView.findViewById(R.id.tv_softkb_5);
tv_softkb_5.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.append("5");
etGoodsPrice.setText(buffer.toString());
}
if (etOriginalPrice.hasFocus()) {
buffer2.append("5");
etOriginalPrice.setText(buffer2.toString());
}
}
});
TextView tv_softkb_6 = (TextView) editPriceView.findViewById(R.id.tv_softkb_6);
tv_softkb_6.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.append("6");
etGoodsPrice.setText(buffer.toString());
}
if (etOriginalPrice.hasFocus()) {
buffer2.append("6");
etOriginalPrice.setText(buffer2.toString());
}
}
});
TextView tv_softkb_7 = (TextView) editPriceView.findViewById(R.id.tv_softkb_7);
tv_softkb_7.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.append("7");
etGoodsPrice.setText(buffer.toString());
}
if (etOriginalPrice.hasFocus()) {
buffer2.append("7");
etOriginalPrice.setText(buffer2.toString());
}
}
});
TextView tv_softkb_8 = (TextView) editPriceView.findViewById(R.id.tv_softkb_8);
tv_softkb_8.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.append("8");
etGoodsPrice.setText(buffer.toString());
}
if (etOriginalPrice.hasFocus()) {
buffer2.append("8");
etOriginalPrice.setText(buffer2.toString());
}
}
});
TextView tv_softkb_9 = (TextView) editPriceView.findViewById(R.id.tv_softkb_9);
tv_softkb_9.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.append("9");
etGoodsPrice.setText(buffer.toString());
}
if (etOriginalPrice.hasFocus()) {
buffer2.append("9");
etOriginalPrice.setText(buffer2.toString());
}
}
});
TextView tv_softkb_0 = (TextView) editPriceView.findViewById(R.id.tv_softkb_0);
tv_softkb_0.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.append("0");
etGoodsPrice.setText(buffer.toString());
}
if (etOriginalPrice.hasFocus()) {
buffer2.append("0");
etOriginalPrice.setText(buffer2.toString());
}
}
});
tv_softkb_point.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (etGoodsPrice.hasFocus()) {
buffer.append(".");
etGoodsPrice.setText(buffer.toString());
}
if (etOriginalPrice.hasFocus()) {
buffer2.append(".");
etOriginalPrice.setText(buffer2.toString());
}
}
});
}
/**
* 使用edittext获取焦点弹不出软件键盘
*
* @param etGoodsPrice
* @param etOriginalPrice
*/
private void hiddenSoftKB(final EditText etGoodsPrice, final EditText etOriginalPrice) {
etGoodsPrice.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int inType = etGoodsPrice.getInputType(); // backup the input
// type
etGoodsPrice.setInputType(InputType.TYPE_NULL); // disable soft
// input
etGoodsPrice.onTouchEvent(event); // call native handler
etGoodsPrice.setInputType(inType); // restore input type
etGoodsPrice.setSelection(etGoodsPrice.getText().length());
return true;
}
});
etOriginalPrice.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int inType = etOriginalPrice.getInputType(); // backup the input
// type
etOriginalPrice.setInputType(InputType.TYPE_NULL); // disable
// soft
// input
etOriginalPrice.onTouchEvent(event); // call native handler
etOriginalPrice.setInputType(inType); // restore input type
etOriginalPrice.setSelection(etOriginalPrice.getText().length());
return true;
}
});
}
/**
* 输入原价和价格dialog
*/
private void showMofityPrice() {
// TODO Auto-generated method stub
mofityPrice.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// iPriceEdit
// iOldPriceEdit
// iPriceEdit.setFocusable(true);
hiddenKeyboard();
editPriceDialog();
}
});
}

以上所述是小编给大家介绍的Android开发仿咸鱼键盘修改版,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android自定义软键盘的设计与实现代码

    偶然间发现了Android.inputmethodservice.Keyboard类,即android可以自定义键盘类,做了一个简单例子供大家参考. 效果如下: 先看界面布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout

  • Android ListView适配器(Adapter)优化方法详解

    Android ListView的优化,在做Android项目的时候,在用到ListView 界面及数据显示,这个时候如果资源过大,对项目来说,用户体验肯定是不好的,这里就对如何优化做了详细介绍: Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View.想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源? ListView的Adapter的作用如下图所示: 先看看下面

  • Android控件RefreshableView实现下拉刷新

    需求:自定义一个ViewGroup,实现可以下拉刷新的功能.下拉一定距离后(下拉时显示的界面可以自定义任何复杂的界面)释放手指可以回调刷新的功能,用户处理完刷新的内容后,可以调用方法onCompleteRefresh()通知刷新完毕,然后回归正常状态.效果如下: 源代码:RefreshableView(https://github.com/wangjiegulu/RefreshableView) 分析: 我们的目的是不管什么控件,只要在xml中外面包一层标签,那这个标签下面的所有子标签所在的控件

  • Android 自定义控件实现显示文字的功能

    Android 自定义控件实现显示文字的功能 自定义控件-–逐个显示文字 ONE Goal ,ONE Passion ! 前言: 今天要实现的效果时.让我们的文字一个一个显示出来.上效果图吧: 实现原理: 1,拿到要显示的文字. 2,计算文字显示的速率 字体显示的速度 v = 总的字体长度 / 总的显示时间 3,将文字根据速率显示到控件上. 自定义View: public class printTextView extends TextView { /** * 字体显示出来的时间 */ priv

  • Android 实现界面刷新的几种方法

    Android 界面刷新 Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用. Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面. 利用Handler刷新界面 实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界

  • 实现一个Android锁屏App功能的难点总结

    自定义一个漂亮实用的锁屏app,如果能赢得用户的认可,替换系统自带的锁屏,绝对是一个不小的日活入口.这段时间正好总结一下最近调研的Android平台的锁屏app开发中的难点. 一.前言 锁屏的大概实现原理都很简单.监听系统的亮屏广播,在亮屏的时候展示自己的锁屏界面,用户在锁屏界面上进行一系列的动作才能解锁.有的手机启动锁屏界面的过程会很卡,所以会明显看到亮屏之后锁屏界面的启动有延时,因此也可以选择监听系统灭屏的广播,屏幕关掉的时候就将锁屏界面准备好,直接亮屏展示(灭屏后你的app会比较容易被杀死

  • Android的ImageButton当显示Drawable图片时就不显示文字

    很多人对 Android提供的ImageButton有个疑问,当显示Drawable图片时就不会再显示文字了,其实解决的方法有三种: 第一种:就是图片中就写入文字,但是这样解决会增加程序体积,同时硬编码方式会影响多国语言的发布. 第二种:解决方法很简单,通过分析可以看到ImageButton的 layout,我们可以直接直接继承,添加一个TextView,对齐方式为右侧即可实现ImageButton支持文字右侧显示. 第三种:更简洁效率的方法:使用Button ,然后设定Button 的 and

  • Android 自定义View时使用TypedArray配置样式属性详细介绍

     Android 自定义View时使用TypedArray配置样式属性详细介绍 在自定义view时为了提高复用性和扩展性,可以为自定义的view添加样式属性的配置,比如自定义图片资源.文字大小.控件属性等,就这需要用到TypedArray类,下面以一个自定义的可点击扩展和收缩的TextView为例记录下这个类的简单使用. 先上效果图: 点击以后为 再贴代码: 1.自定义view类: /** * @title ExpandTextView * @description 可扩展TextView,可以

  • Android开发仿咸鱼键盘DEMO(修改版)

    在这里布局我就不贴出来了 /** * 最终被调用的修改价格dialog */ protected void editPriceDialog() { // TODO Auto-generated method stub editPriceView = View.inflate(this, R.layout.dialog_price_input_keyboard, null); priceDialog = new Dialog(this, R.style.contactdialog); priceD

  • Android开发仿QQ空间根据位置弹出PopupWindow显示更多操作效果

    我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图: 这个要实现这个效果可以分几步进行 1.第一步自定义PopupWindow,实现如图的样式,这个继承PopupWindow自定义布局很容易实现 2.得到点击按钮的位置,根据位置是否在屏幕的中间的上方还是下方,将PopupWindow显示在控件的上方或者下方 3.适配问题,因为PopupWindow上面的操作列表

  • Android 开发仿简书登录框可删除内容或显示密码框的内容

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedittextdemo; import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.text.Editable; impor

  • Android开发仿映客送礼物效果

    这里写链接内容仿映客送小礼物的特效,顺便复习一下属性动画,话不多说先看效果图. 需求分析 可以看到整个动画有几部分组成,那我们就把每个部分拆分出来各个击破. 1.要显示那些内容以及内容间的位置关系? 可以看到我们要显示用户头像,昵称,礼物图标以及数量.所以这里我选择用FrameLayout来作为根布局. 2.需要哪些动画以及动画的执行顺序? a.首先是整体从左到右飞入并有一个回弹(translationX + OvershootInterpolator) b.然后是礼物从左到右飞入而且是一个带减

  • Android开发仿扫一扫实现拍摄框内的照片功能

    就是仿照现在扫一扫的形式,周围是半透明的遮挡,然后中间是全透明的,拍摄后只截取框内的内容 查了很多博客,实现起来真的太复杂了,本人比较怕麻烦所以在很多地方偷懒了 先上效果图: 第一步:设置照相机预览以及拍照 这是所有步骤的前提,没有预览,用户怎么知道自己拍的什么呢.预览用的是SurfaceView 这篇博文写得已经十分详细了,打开照相机,然后拍照,而且十分简洁!不想别的博客一下就几百行代码不知所云.这篇代码可以复制下去当相机模版使用. 这里遇到一个问题,就是预览的效果是左转90度的,拍出来也是左

  • Android开发之软键盘用法实例分析

    本文实例讲述了Android开发中软键盘用法.分享给大家供大家参考.具体如下: 打开软键盘,有两个方法.一个是showSoftInput,一个是toggleSoftInput. package com.example.dd; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.Menu; import android.view.View

  • Android开发仿IOS滑动开关实现代码

    Android开发仿IOS滑动开关实现代码 Android与iOS相比,ios好多控件都是自带的,而android需要使用自定义来实现.今天说的是ios的滑动开关,我层看到好多博客都是通过自定义ToggleButton实现的.这里我通过自定义view来实现他的效果. 首先在onsizechange里把2个半圆和一个矩形绘制出来. width = w; height = h; left = top = 0; right = width; bottom = height * 0.8f; cx = (

  • android开发仿ios的UIScrollView实例代码

    今天重新装了编译器,结果崩无极限,真是日了狗了了.刚刚才知道问题在哪边. 好了,说正事,对于ios开发我没接触,不是很了解,百度了半天,差不多就是UIScrollView的把.如果不对,请指证.具体什么效果呢,我刚才拿朋友的iphone手机看了下,iphone的设置界面,第一个列表往下拉可以继续滚,上拉同理.不过android好像没有自带的这种情况. 我把这种效果称为滚无极限的scollview. 下面就来上源码: 首先,最最最重要的就是判断当前视图是否为空,你空视图滚不滚好像没啥区别,除了an

  • Android开发中软键盘的显示和隐藏

    本篇内容通过操作软键盘的函数着手详细分析了隐藏或者显示软键盘的实现方法,并且对其中重要的代码做了详细分析. 一.开篇 如果有需要用到输入的地方,通常会有需要自动弹出或者收起软键盘的需求.开篇明义,本文会讲讲弹出和收起软键盘的一些细节,最终还会从源码进行分析. 想要操作软键盘,需要使用到 InputMethodManager ,它是一个系统服务,可以使用 Context.getSystemService() 获取到它.而很多关键的逻辑代码,都是在 InputMethodManagerService

  • Android开发仿bilibili刷新按钮的实现代码

    一.简述 最近跟小伙伴一起讨论了一下,决定一起仿一个BiliBili的app(包括android端和iOS端),我们并没有打算把这个项目完全做完,毕竟我们的重点是掌握一些新框架的使用,并在实战过程中发现并弥补自身的不足. 本系列将记录我(android端)在开发过程中的一些我觉得有必要记录的功能实现而已,并不是完整的从0到1的完整教程,若个别看官大爷觉得不好请出门左拐谢谢. 以下是该项目将会完成的功能. 视频播放功能 直播功能 弹幕功能 换肤功能 - 本系列文章,将会有记录以上功能的实现但不仅仅

随机推荐