您的位置:首页 > 移动开发 > Android开发

android 从底部划出Dialog

2016-05-17 20:00 399 查看
我是根据大神学习的,这个是大神的项目,这个项目里面含有我标题所叙述的,我只是学习到这里,感觉比较好,所以提炼出来,现在我给出大神的gitHub https://github.com/robotlife/TongBanJie 我先给出代码import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.support.v4.app.DialogFragment;import android.view.Gravity;import android.view.View;import android.view.WindowManager;import android.widget.Button;import android.widget.TextView;public abstract class BaseDialogFragment extends DialogFragment {protected Context mContext;protected OnCancelListener mCancelListener;protected TextView mTilte;protected Button mCancel;protected String mTitle; // DialogFragment的标题protected int mHeight; // DialogFragment的高度protected static final String TITLE = "title";protected static final String HEIGHT = "height";protected int styleId;public abstract int setStyleId();@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);styleId = setStyleId();setStyle(STYLE_NO_FRAME, styleId);getArgs();}protected void getArgs() {Bundle bd = getArguments();if (bd != null) {mTitle = bd.getString(TITLE);mHeight = bd.getInt(HEIGHT);}}protected static Bundle initArgs(String title, int height) {Bundle args = new Bundle();args.putString(TITLE, title);args.putInt(HEIGHT, height);return args;}protected void initDialog() {Dialog dialog = getDialog();dialog.getWindow().setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();lp.windowAnimations = styleId;lp.width = WindowManager.LayoutParams.MATCH_PARENT;lp.height = WindowManager.LayoutParams.MATCH_PARENT;dialog.getWindow().setAttributes(lp);dialog.setCanceledOnTouchOutside(false);}protected void initDialogTitle(View view) {// mTilte = (TextView) view.findViewById(R.id.tv_navTitle);// mTilte.setText(mTitle);//// mCancel = (Button) view.findViewById(R.id.btn_navCancel);// mCancel.setOnClickListener(new View.OnClickListener() {// @Override// public void onClick(View v) {// if (mCancelListener != null) {// mCancelListener.doCancelClick();// }//// dismiss();// }// });}@Overridepublic void onStart() {super.onStart();initDialog();}public void setOnCancelListener(OnCancelListener cancelListener) {this.mCancelListener = cancelListener;}public static interface OnCancelListener {public void doCancelClick();}}上面的代码中重要的代码如下Dialog dialog = getDialog();       dialog.getWindow.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM);  //这里设置了底部与方向WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();lp.windowAnimation = styleId;  //这的styleId,是从Styel.xml里面拿取的,我后面会粘贴出来       lp.width = WindowManager.LayoutParams.MATCH_PARENT;lp.height = WindowManager.LayoutParams.MATCH_PARENT;      dialog.getWindow.setAttributes(lp);dialog.setCanceledOnTouchOutside(false);import android.content.Context;import android.os.Bundle;import android.support.v4.app.DialogFragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.GridView;import android.widget.TextView;import com.robot.tongbanjie.R;import com.robot.tongbanjie.adapter.ShareAdapter;import com.robot.tongbanjie.util.ToastUtils;public class ShareDialogFragment extends BaseDialogFragment {public static ShareDialogFragment newInstance(Context context, String title, int height) {ShareDialogFragment dialogFragment = new ShareDialogFragment();dialogFragment.mContext = context;dialogFragment.setArguments(initArgs(title, height));return dialogFragment;}@Overridepublic int setStyleId() {return R.style.CustomDialog;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.dialog_share, container,false);initDialogTitle(view);GridView gridView = (GridView) view.findViewById(R.id.share_grid);TextView closeDialog = (TextView) view.findViewById(R.id.close);ShareAdapter adapter = new ShareAdapter(mContext);gridView.setAdapter(adapter);gridView.setOnItemClickListener(new ShareItemClickListener(this));closeDialog.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dismiss();}});return view;}private class ShareItemClickListener implements AdapterView.OnItemClickListener {private DialogFragment dialog;public ShareItemClickListener(DialogFragment dialog) {this.dialog = dialog;}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {TextView title = (TextView)(view.findViewById(R.id.share_title));ToastUtils.showShort(title.getText().toString() + "分享成功!");dismiss();}}private void shareWeixin() {}private void shareFriendCircle() {}private void shareWeibo() {}private void shareQQ() {}private void shareQzone() {}}
<pre style="font-family: 'Courier New'; font-size: 11.3pt; background-color: rgb(255, 255, 255);">ShareDialogFragment这个类是继承上面的<span style="font-size: 11.3pt;">BaseDialogFragment,</span>
重要的代码如下
public int setStyleId(){
return R.style.CustomDialog
}
下面贴出XML
dialog_share
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#80000000"android:orientation="vertical"><Viewandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1" /><GridViewandroid:background="@color/white"android:id="@+id/share_grid"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="20dp"android:paddingTop="30dp"android:cacheColorHint="@null"android:listSelector="@color/transparent"android:numColumns="3"android:verticalSpacing="10dp" /><Viewandroid:layout_width="match_parent"android:layout_height="1px"android:background="@color/divider_color"></View><TextViewandroid:background="@color/white"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:padding="10dp"android:text="关闭"android:id="@+id/close"android:textColor="@color/red_pres"android:textSize="18sp" /></LinearLayout>
最后给出style.xml
<style name="CustomDialog" parent="@android:style/Theme.Dialog"><item name="android:windowBackground">@color/transparent</item><item name="android:backgroundDimEnabled">false</item><!--activity不变暗--><item name="android:background">@color/transparent</item><item name="android:windowEnterAnimation">@anim/push_bottom_in</item><item name="android:windowExitAnimation">@anim/push_bottom_out</item></style>
这里面重要的是设置了背景以及窗体的背景,特别是windowEnterAnimation 和 windowExitAnimation 这2个是动画的效果,我现在给出动画先给出push_bottom_in<?xml version="1.0" encoding="utf-8"?><!-- 上下滑入式 --><set xmlns:android="http://schemas.android.com/apk/res/android" ><translateandroid:duration="200"android:fromYDelta="100%p"android:toYDelta="0"/><alphaandroid:fromAlpha="0.0"android:toAlpha="1.0"android:duration="200"/></set>再给出push_bottom_out<?xml version="1.0" encoding="utf-8"?><!-- 上下滑入式 --><set xmlns:android="http://schemas.android.com/apk/res/android" ><translateandroid:duration="200"android:fromYDelta="0"android:toYDelta="50%p" /><alphaandroid:fromAlpha="1.0"android:toAlpha="0.0"android:duration="200"/></set>我实验了一下第二个push_bottom_out,把toYDelta写成100%p也是没有问题的
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: