SlidingMenu(側滑框)的使用、ViewPager衝突處理
下載libary
導包
- 將所下載的libary包匯入到專案中(該地址下的工具包支援Eclipse)
建立自己的專案
- 在這提供兩種方式來使用SlidingMenu
- 第一種寫法—直接例項化SlidingMenu,邏輯一般實現在activity中
private void initSlidingMenu() {
// 初始化SlidingMenu物件
SlidingMenu menu = new SlidingMenu(this);
// 設定側滑方式為左側側滑
menu.setMode(SlidingMenu.LEFT);
/*
* 設定拖拽模式 SlidingMenu.TOUCHMODE_FULLSCREEN全屏觸控有效
* SlidingMenu.TOUCHMODE_MARGIN 拖拽邊緣有效 SlidingMenu.TOUCHMODE_NONE
* 不響應觸控事件
*/
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 設定陰影的寬度
menu.setShadowWidthRes(R.dimen.shadow_width);
// 設定陰影的圖片
menu.setShadowDrawable(R.drawable.shadow);
// 設定sldingMenu的剩餘大小---=內容顯示頁對應的dp大小
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// 設定滑動時的漸變程度
menu.setFadeDegree(0.35 f);
// 使SlidingMenu附加在Activity右邊
// SlidingMenu.SLIDING_CONTENT 將側滑欄設定為在內容位置
// SlidingMenu.SLIDING_WINDOW 將側滑欄設定為在整個視窗呈現
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
// 設定SlidingMenu關聯的佈局
menu.setMenu(R.layout.menu);
// 在SlidingMenu關聯佈局中查詢控制元件
TextView tv_test = (TextView) menu.findViewById(R.id.tv_test);
// 簡單設定SlidingMenu介面顯示內容
tv_test.setText("haha" );
}
- 相關聯的dimen配置
<resources>
<dimen name="shadow_width">16dp</dimen>
<dimen name="slidingmenu_offset">160dp</dimen>
</resources>
第二種寫法—讓類繼承SlidingFragmentActivity或其他Sliding型別的Activity
這種寫法可以單獨將SlidingMenu要展示的內容抽取出來,放到某一個Fragment中去處理
- 程式碼演示
public class MainActivity extends SlidingFragmentActivity {
private SlidingMenu slidingMenu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 內容頁佈局
setContentView(R.layout.activity_main);
// 設定側拉條目佈局
setBehindContentView(R.layout.menu_frame);
// 獲取側拉欄目物件
slidingMenu = getSlidingMenu();
/*
* SlidingMenu.TOUCHMODE_FULLSCREEN全屏觸控有效 SlidingMenu.TOUCHMODE_MARGIN
* 拖拽邊緣有效 SlidingMenu.TOUCHMODE_NONE 不響應觸控事件
*/
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 設定內容顯示頁對應的dp大小
slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// //設定左側側拉欄目寬度
// slidingMenu.setBehindWidth(140);
// 設定側拉欄目所在位置
/*
* SlidingMenu.LEFT SlidingMenu.LEFT_RIGHT SlidingMenu.RIGHT
*/
slidingMenu.setMode(SlidingMenu.LEFT);
// 給側拉欄目和左側內容頁區分開(加線)
slidingMenu.setShadowDrawable(R.drawable.shadow);
// 設定線的寬度
slidingMenu.setShadowWidthRes(R.dimen.shadow_width);
// fragment去替換佈局中節點
MenuFragment menuFragment = new MenuFragment();
// FragmentManager管理者
getSupportFragmentManager()
// 開啟事物
.beginTransaction()
// 通過fragment去替換對應佈局
.replace(R.id.menu, menuFragment, "MENU")
// 提交事物
.commit();
}
- MenuFragment程式碼
public class MenuFragment extends Fragment {
private ListView listView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.menu_layout, container, false);
listView = (ListView) view.findViewById(R.id.lv);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ArrayList<String> strList = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
strList.add("第" + i + "個條目");
}
// 設定資料介面卡
listView.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, strList));
}
}
- 佈局配置
- activity_main 的佈局配置
<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" >
</RelativeLayout>
- menu_frame的配置
<?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:orientation="vertical" >
<FrameLayout
android:id="@+id/menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</FrameLayout>
</LinearLayout>
- memu_layout的佈局配置
<?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:orientation="vertical" >
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
SlidingMenu和ViewPager的衝突處理
當介面使用viewPager來填充的時候,會出現一個問題,不管在什麼位置,我們都能夠將SlidingMenu拖拽出來,影響了ViewPager的正常滑動,我們可能會要求只有在第一頁的時候,能夠將SlidingMenu拖拽出來,其他時候,可以在最邊緣位置,或者根本不拖拽出來。這裡需要設定這樣的程式碼
// 設定ViewPager的監聽事件
viewPager.setOnPageChangeListener(new OnPageChangeListener() {@Override public void onPageSelected(int arg0) { // 噹噹天條目是0的時候,設定可以在任意位置拖拽出SlidingMenu if (arg0 == 0) { getSlidingMenu().setTouchModeAbove( SlidingMenu.TOUCHMODE_FULLSCREEN); } else { // 當在其他位置的時候,設定不可以拖拽出來(SlidingMenu.TOUCHMODE_NONE),或只有在邊緣位置才可以拖拽出來TOUCHMODE_MARGIN getSlidingMenu().setTouchModeAbove( SlidingMenu.TOUCHMODE_NONE); } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg0) { } });
`
左右滑動的SlidingMenu
- 程式碼
package com.example.slidingmenu;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Window;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
public class MainActivity extends SlidingFragmentActivity {
private SlidingMenu slidingMenu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 內容頁佈局
setContentView(R.layout.content);
// 設定側拉條目佈局
setBehindContentView(R.layout.menu_frame);
// 獲取側拉欄目物件
slidingMenu = getSlidingMenu();
/*
* SlidingMenu.TOUCHMODE_FULLSCREEN全屏觸控有效 SlidingMenu.TOUCHMODE_MARGIN
* 拖拽邊緣有效 SlidingMenu.TOUCHMODE_NONE 不響應觸控事件
*/
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 設定內容顯示頁對應的dp大小
slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// //設定左側側拉欄目寬度
// slidingMenu.setBehindWidth(140);
// 設定側拉欄目所在位置
/*
* SlidingMenu.LEFT SlidingMenu.LEFT_RIGHT SlidingMenu.RIGHT
*/
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
// 給側拉欄目和左側內容頁區分開(加線)
slidingMenu.setShadowDrawable(R.drawable.shadow);
// 設定線的寬度
slidingMenu.setShadowWidthRes(R.dimen.shadow_width);
// fragment去替換佈局中節點
MenuFragment menuFragment = new MenuFragment();
// FragmentManager管理者
getSupportFragmentManager()
// 開啟事物
.beginTransaction()
// 通過fragment去替換對應佈局
.replace(R.id.menu, menuFragment, "MENU")
// 提交事物
.commit();
slidingMenu.setSecondaryMenu(R.layout.menu_frame_right);
// 設定右側分割線的圖片
slidingMenu.setSecondaryShadowDrawable(R.drawable.shadow);
RightMenuFragment rightMenuFragment = new RightMenuFragment();
// FragmentManager管理者
getSupportFragmentManager()
// 開啟事物
.beginTransaction()
// 通過fragment去替換對應佈局
.replace(R.id.menu_right, rightMenuFragment, "MENU_RIGHT")
// 提交事物
.commit();
}
// 當前類中做替換當前顯示內容介面的操作
public void switchFragment(Fragment fragment) {
if (fragment != null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, fragment, "HOME").commit();
// 縮回(點選彈出左側側拉欄目)
slidingMenu.toggle();
}
}
}
- 佈局content.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
- 佈局menu_frame_right.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_right"
android:layout_width="match_parent"
android:background="#00ff00"
android:layout_height="match_parent" >
</FrameLayout>
- 佈局 menu_frame.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu"
android:layout_width="match_parent"
android:background="#ff0000"
android:layout_height="match_parent" >
</FrameLayout>
- dimens 配置
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="slidingmenu_offset">180dp</dimen>
<dimen name="list_padding">10dp</dimen>
<dimen name="shadow_width">5dp</dimen>
</resources>
相關推薦
SlidingMenu(側滑框)的使用、ViewPager衝突處理
下載libary 導包 將所下載的libary包匯入到專案中(該地址下的工具包支援Eclipse) 建立自己的專案 在這提供兩種方式來使用SlidingMenu 第一種寫法—直接例項化SlidingMenu,邏輯一般實現在a
iOS仿QQ側滑選單、登入按鈕動畫、仿鬥魚直播APP、城市選擇器、自動佈局等原始碼
iOS精選原始碼 QQ側滑選單,右滑選單,QQ展開選單,QQ好友分組 image 登入按鈕 image 3分鐘快捷建立高效能輪播圖 ScrollView巢狀ScrolloView(UITableView 、UICollectionView)解決方案
Android中Scrollview、ViewPager衝突問題彙總(已解決)
顯示問題: 1、設定ScrollView的fillViewPort為true 2、設定ViewPager的layout_height為一個固定高度,比如:100dip 衝突問題: 不過ViewPager顯示出來以後,還有另外一個衝突:ViewPager左右不能滑動了!是的
Android LRecyclerView 實現側滑選單、長按拖拽等功能
LRecyclerView能做什麼? 經過再三思考,同時也為了大家使用方便,LRecyclerView集成了SwipeMenu系列功能,包括Item側滑選單、長按拖拽Item,滑動刪除Item等功能。 demo apk下載地址:點我下載 功能演示 本次新增SwipeMenu系
[Android開發] SlidingMenu側滑剩餘的位置新增陰影淡入淡出
一、效果圖 二、修改方法 1. 在SlidingMenu新增一個設定透明度方法 public void setOffsetFadeDegree(float f) { mViewBehind.setOffsetFadeDegr
Eclipse 安卓開發匯入SlidingMenu側滑選單這些坑!!
博主這幾天的在開發一個安卓demo時候,想匯入Slidingmenu實現側滑選單效果,SlidingMenu是GitHub上一個開源專案,它並不是一個完整的專案,而是你需要匯入你的工程進行再次開發。
Android仿QQ側滑(刪除、置頂等)功能
實現類似QQ滑動出現可操作項的功能,在網上看到有人自定義LinearLayout實現這個效果,但是靈活性有限。此demo使用開源專案SwipeLayout實現該功能。關於SwipeLayout的常用設定和屬性,這裡都做介紹,下面進入正題。 一、效果圖 二
DrawerLayout側滑選單、Toolbar和沉浸式狀態列的使用
最近在開發中需要用到側滑選單,以前使用的SlidingMenu,但似乎已經被Google淘汰了(過時了),於是乎使用了DrawerLayout來實現,既然是在專案使用的,那麼Toolbar和沉浸式狀態列也是要配合使用的,這裡做一下記錄。 我們先來看一看
Android之十SlidingMenu側滑選單的實現分析
package com.example.walkerlogin1.view; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.
解決側滑中ViewPager和SlidingMenu的滑動衝突
當我們在使用開源框架SlidingMenu時,如果要是使用到ViewPager,就會出現滑動衝突。 解決方案: }/** 解決ViewPager和側滑衝突 */ public void changeSlidingMenuTOUCHMODE(int arg0) {
(轉)ViewDragHelper實現QQ5.0側滑並處理與ViewPager的滑動沖突
ogl 指定 dem ont 狀態 恢復 ole sed contex 最近在做項目,涉及到類似QQ的頁面的滑動。但是卻遇到了側滑和ViewPager沖突的問題,頭疼了很長時間,最後在網上發現了這篇博客,轉載過來供自己學習參考(寫這篇博客的原創作者,因為我發現這篇博客的地方
SwipeBack側滑開源元件衝突問題處理
SwipeBack側滑開源元件衝突問題處理 SwipeBack github地址:https://github.com/zhibuyu/SwipeBackDemo 智慧手機的大屏化,使得單手操作和側滑返回這兩個功能成為了移動開發中常見的需求,本文說的就是側滑開源元件SwipeBa
側滑刪除進階(七、八)
== tor rri startx Y軸 fin widget posit 調用 activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andro
viewPager+RadioGroup TableLayout側滑欄
package com.example.lianxi; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; imp
側滑(點選條目進行跳轉+點選更換頭像(二次取樣))+ViewPager
1.Layout佈局 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk
側滑+ViewPager
1.側滑加Viewpager import android.graphics.drawable.Drawable; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; im
為側滑設定listview多條目,並與viewpager互動聯絡
MainActivity: ## 側滑的listview條目和viewpager的fragment進行互動聯絡,是兩個fragment之間的聯絡。通過Activity作為中間人。 ## 在Activity定義一個方法: //position:listview條目 public vo
slideview 側滑時上下滾動 onitemclick和滑動的衝突 解決方法
初學android不久 第一次寫部落格 記錄下。如果有錯誤 請提醒,萬分感謝 slideview原文地址:http://blog.csdn.net/singwhatiwanna/article/details/17515543 自定義LinearLayout ,作為listview裡的ite
JavaFX文字框、按鈕、列表框事件監聽處理
//文字框 TextField textField = new TextField(); //監聽文字框輸入值變化 textField.textProperty().addListener(this::textChange); private void textChange(
仿QQ實現側滑效果和刪除、置頂功能——ListView版
我儘量不打錯別字,用詞準確,不造成閱讀障礙 高仿QQ側滑效果,實現置頂、刪除功能,完美適用於ListView,至於RecyclerView正在研究,效果有些問題。 本側滑很簡單,只有右側的側滑,並沒有其他酷炫的功能,希望給大家一個提示思路,如果需求簡單的話