本文只是记录一些零碎的东西
真的是受不了自己了,以为自己记录了,再次要使用时,居然没有找到!
PopWindow的使用,这里还记录了一下RadioButton和RadioGroup的组合使用,可以实现单选,直接上代码
看一下布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map_order_cancle_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="@dimen/map_bottom_text_left" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/order_cancle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:paddingLeft="@dimen/map_bottom_text_left"
android:textColor="@android:color/black"
android:textSize="@dimen/map_order_cancle"
android:text="@string/map_cancle" />
<TextView
android:id="@+id/order_sure"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right"
android:textColor="@android:color/black"
android:layout_weight="0.5"
android:paddingRight="@dimen/map_bottom_text_left"
android:textSize="@dimen/map_order_cancle"
android:text="@string/map_sure" />
</LinearLayout>
<RadioGroup
android:id="@+id/order_cancle_rg"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/order_cancle_rg_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="@string/map_order_can1"
android:checked="true"/>
<RadioButton
android:id="@+id/order_cancle_rg_two"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="@string/map_order_can2" />
<RadioButton
android:id="@+id/order_cancle_rg_three"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="@string/map_order_can3" />
</RadioGroup>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/order_cancle_rg_four"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/order_cancle_rg_four_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="@android:color/black"
android:background="@null"
android:hint="@string/map_order_can4" />
</LinearLayout>
</LinearLayout>
java代码里怎么实现的
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.inputmethod.InputMethodManager;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.PopupWindow;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.qitong.qtcx.R;
import com.qitong.qtcx.interfaces.PopReturnListener;
/**
* 取消订单,需要提供3-4个选项,还有一行输入框
* @author chenling0418
* 一组RadioGroup,一个单独的RadioButton
* 单独的RadioButton的点击事件RadioGroup里也会收到
* 这里组合使用,实现了 一点击RadioButton,输入框软键盘自动弹出,整个PopupWindow 上移
*/
public class CancleOrderPopup extends PopupWindow {
private View view;
@ViewInject(R.id.order_cancle_rg)
private RadioGroup cancleRg;
@ViewInject(R.id.order_cancle_rg_one)
private RadioButton cancleRgOne;
@ViewInject(R.id.order_cancle_rg_two)
private RadioButton cancleRgTwo;
@ViewInject(R.id.order_cancle_rg_three)
private RadioButton cancleRgThree;
@ViewInject(R.id.order_cancle_rg_four)
private RadioButton cancleRgFour;
@ViewInject(R.id.order_cancle_rg_four_content)
private EditText cancleRgFourContent;
@ViewInject(R.id.order_sure)
private TextView orderSure;
@ViewInject(R.id.order_cancle)
private TextView orderCancle;
private boolean isFourChecked;
public CancleOrderPopup(Context context,PopReturnListener listener) {
super(context);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.map_order_cancle, null);
initView(context,listener);
initPop();
}
private void initView(final Context context,final PopReturnListener listener) {
ViewUtils.inject(this, view); // 注入view和事件
isFourChecked = false;
cancleRgFour.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
cancleRgOne.setChecked(false);
cancleRgTwo.setChecked(false);
cancleRgThree.setChecked(false);
isFourChecked = true;
if(isChecked){
//三个属性必须同时设置 EditText获取焦点 点击RadioButton时自动弹出软键盘
cancleRgFourContent.setFocusable(true);
cancleRgFourContent.setFocusableInTouchMode(true);
cancleRgFourContent.requestFocus();
((InputMethodManager)cancleRgFourContent.getContext().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(cancleRgFourContent, 0);
}
}
});
cancleRg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(isFourChecked){
cancleRgFour.setChecked(false);
isFourChecked = false;
cancleRgFourContent.setText("");
((RadioButton)view.findViewById(checkedId)).setChecked(true);
}
}
});
orderSure.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(cancleRgFour.isChecked() ){
if(TextUtils.isEmpty(cancleRgFourContent.getText())){
Toast.makeText(context, "内容不可以为空", Toast.LENGTH_SHORT).show();
}else{
listener.messageListener(cancleRgFourContent.getText().toString());dismiss();
}
}else{
listener.messageListener( ((RadioButton)view.findViewById(cancleRg.getCheckedRadioButtonId())).getText().toString() );dismiss();
}
}
});
orderCancle.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
}
private void initPop() {
//设置的View
this.setContentView(view);
//设置弹出窗体的宽
this.setWidth(LayoutParams.MATCH_PARENT);
//设置弹出窗体的高
this.setHeight(LayoutParams.WRAP_CONTENT);
//设置弹出窗体可点击
this.setFocusable(true);
//防止虚拟软键盘被弹出菜单遮住
this.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
//实例化一个ColorDrawable颜色为半透明
// ColorDrawable dw = new ColorDrawable(0xb0000000);
ColorDrawable dw = new ColorDrawable(Color.WHITE);
//设置弹出窗体的背景
this.setBackgroundDrawable(dw);
//view添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int height = view.findViewById(R.id.map_order_cancle_view).getTop();
int y=(int) event.getY();
if(event.getAction()==MotionEvent.ACTION_UP){
if(y<height){
dismiss();
}
}
return true;
}
});
}
}
注解是使用了 xUtil,代码里不需要findViewById 了,
接口会调
public interface PopReturnListener {
void messageListener(String message);
}
怎么使用popwindow
(new CancleOrderPopup(getActivity(),new PopReturnListener() {
@Override
public void messageListener(String message) {
//
}
})).showAtLocation(view.findViewById(R.id.fragment_baidumap), Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置
有几个需要注意的地方,主动打开输入软件盘 private EditText cancleRgFourContent;
cancleRgFourContent.setFocusable(true);
cancleRgFourContent.setFocusableInTouchMode(true);
cancleRgFourContent.requestFocus();
((InputMethodManager)cancleRgFourContent.getContext().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(cancleRgFourContent, 0);
得到值RadioGroup里被选中的RadioButton的值
((RadioButton)view.findViewById(cancleRg.getCheckedRadioButtonId())).getText().toString()