目标:利用 <translate />動畫,自定義Dialog,寫出從底部升起的Menu菜單。
貼代碼一: 調用自定義Dialog
public class MainActivity extends Activity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
Dialog dialog=new MyDialog(MainActivity.this,R.style.MyDialogStyle);
Window window = dialog.getWindow();
//設定顯示動畫
window.setWindowAnimations(R.style.main_menu_animstyle);
//設定顯示位置
WindowManager.LayoutParams wl = window.getAttributes();
wl.x = 0;
wl.y = getWindowManager().getDefaultDisplay().getHeight();
//設定寬度
//這裡未能解決高分辨率下"充滿螢幕的問題",但仍可用來設定寬度=螢幕×0.幾
// WindowManager m=getWindowManager();
// Display d=m.getDefaultDisplay();
// wl.width=(int)(d.getWidth());
window.setAttributes(wl);
dialog.setCanceledOnTouchOutside(true);//設定點選外圍解散
dialog.show();
}
});
}
}
貼代碼二: MyDialog extends Dialog
public class MyDialog extends Dialog {
Context context;
private TextView tv_cancel;
public MyDialog(Context context, int theme) {
super(context, theme);
this.context=context;
}
public MyDialog(Context context) {
super(context);
this.context=context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.share_dialog_layout);
//解決在高分辨率下寬度不能充滿螢幕的問題
getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
tv_cancel=(TextView)findViewById(R.id.tv_cancel);
//這裡也可以用回調函數實作
//如果要在這裡實作,則必須寫字首android.view.View.OnClickListener
//我試過直接implements android.view.View.OnClickListener,在onClick()中,也不行
tv_cancel.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
}
}
貼代碼三: share_dialog_layout.xml Dialog的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical" >
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@color/red" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center"
android:text="share this news" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"
android:layout_marginTop="20dp"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@drawable/share_weixin" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@drawable/share_friendzone" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@drawable/share_weibo" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@drawable/share_qzone" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/tv_cancel"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_margin="20dp"
android:background="#ffffff"
android:textColor="@drawable/tv_white_red_selector"
android:gravity="center"
android:text="cancel"
android:textSize="16sp" />
</LinearLayout>
貼代碼四:
① style.xml 中定義 動畫和NoTitle, Background為Transparent。
<style name="main_menu_animstyle" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/window_in</item>
<item name="android:windowExitAnimation">@anim/window_out</item>
</style>
<style name="MyDialogStyle" parent="@android:Theme.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 記得windowBackground必須設定為Transparent -->
</style>
② activity_main.xml 主布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="從底部升起的Menu菜單" />
</RelativeLayout>
③ 動畫anim/window_in , anim/window_out
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:fromYDelta="100%"
android:toYDelta="0" />
</set>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:fromYDelta="0"
android:toYDelta="100%" />
</set>
④ textView的textColor_selector, tv_white_red_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/red"></item>
<item android:state_pressed="false" android:color="@color/white"></item>
</selector>
⑤colors.xml
<resources>
<color name="white">#E6E6E6</color>
<color name="red">#C22221</color>
<color name="textView_white">#555555</color>
</resources>
貼截圖:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyN0cTNzgzMxEDOxITM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
項目代碼: http://download.csdn.net/detail/a86261566/8273331