PDA

View Full Version : تغییر مکان ActionBarDrawerToggle به سمت راست جهت نرم افزارهای فارسی



m_jafari_1370
یک شنبه 12 بهمن 1393, 16:02 عصر
سلام دوستان
توی برنامه ی SlidingMenu که قبلا توی این لینک (http://barnamenevis.org/showthread.php?401729-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/page9) موجود بود (آخرین پست) من سعی کردم که منو رو بیارم به سمت راست. منوی مورد نظر رو تونستم از توی فایل XML به سمت راست بیارم ولی دکمه و آیکون اون هنوز همون سمت چپ و توی اکشن بار مونده.
قسمتهایی از کد که احساس میکنم نیاز بوده اینا هستن:
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open,
R.string.drawer_close) {

public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}


public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item != null && item.getItemId() == android.R.id.home) {
if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
// Notice the Gravity.Right
mDrawerLayout.closeDrawer(Gravity.RIGHT);
} else {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
}
return false;
}
};



من توی فروم های خارجی هم خیلی گشتم ولی متاسفانه چیزی مبنی بر جابجایی این آیکون ندیدم. از طرفی توی خیلی از نزم افزارا دیدم که این دکمه بالا سمت راست هست و منو هم سمت راست هست (یعنی کاملا بومی سازی شده واسه فارسی) الان توی برنامه ی من آیکون سمت چپ هست و با کلیک روی اون، منو از سمت راست باز میشه. من میخوام آیکون هم بره سمت راست بالای منو.
کسی پیشنهادی نداره؟ ممنون از همه
این هم عکس مورد نظر و هدفم!

128092

m_jafari_1370
دوشنبه 13 بهمن 1393, 13:18 عصر
یعنی هیچکی نیست جواب ما رو بده؟؟؟

pcpsoft
دوشنبه 13 بهمن 1393, 13:47 عصر
یعنی هیچکی نیست جواب ما رو بده؟؟؟

داداش فایل های xml رو هم بزار تا بهت بگم

اینو بهش اضافه کن

<ListView
android:id="@+id/drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:choiceMode="singleChoice"

/>

m_jafari_1370
دوشنبه 13 بهمن 1393, 18:34 عصر
داداش فایل های xml رو هم بزار تا بهت بگم

اینو بهش اضافه کن

<ListView
android:id="@+id/drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:choiceMode="singleChoice"

/>
اول ممنون که جواب دادی داداش، من اطلاعاتی که حس میکنم نیازه رو مینویسم، ببخشید اگر زیاده...

MainActivity.java

package info.androidhive.slidingmenu;import ...
.
.
.
public class MainActivity extends Activity {
public static String PACKAGE_NAME;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
@SuppressWarnings("deprecation")
private ActionBarDrawerToggle mDrawerToggle;


// nav drawer title
private CharSequence mDrawerTitle;


// used to store app title
private CharSequence mTitle;


// slide menu items
private String[] navMenuTitles;
private TypedArray navMenuIcons;


private ArrayList<NavDrawerItem> navDrawerItems;
private NavDrawerListAdapter adapter;


@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
exitToast = Toast.makeText(getApplicationContext(), "جهت خروج دوبار کلیک کنید!",
Toast.LENGTH_SHORT);
PACKAGE_NAME = getApplicationContext().getPackageName();
mTitle = mDrawerTitle = getTitle();


// load slide menu items
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_i tems);


// nav drawer icons from resources
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);


mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.list_slidermenu);


navDrawerItems = new ArrayList<NavDrawerItem>();


// adding nav drawer items to array
// Home
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
// Find People
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
// Photos
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
// Communities, Will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1), true, "22"));
// Pages
navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
// What's hot, We will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, "50+"));


// Recycle the typed array
navMenuIcons.recycle();
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());


// setting the nav drawer list adapter
adapter = new NavDrawerListAdapter(getApplicationContext(),
navDrawerItems);
mDrawerList.setAdapter(adapter);


// enabling action bar app icon and behaving it as toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);


mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, R.string.drawer_open,
R.string.drawer_close) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item != null && item.getItemId() == android.R.id.home) {
if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
// Notice the Gravity.Right
mDrawerLayout.closeDrawer(Gravity.RIGHT);
} else {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
}
return false;
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);


if (savedInstanceState == null) {
// on first time display view for first nav item
displayView(0);
}
}//end of onCreate
@Override
public void onBackPressed() {
if (exitToast.getView().isShown())
{
exitToast.cancel();
finish();
}
else
{
exitToast.show();
}
}


/**
* Slide menu item click listener
* */
private class SlideMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// display view for selected nav drawer item
displayView(position);
}
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle action bar actions click
switch (item.getItemId()) {
// case R.id.action_settings:
// return true;
default:
return super.onOptionsItemSelected(item);
}
}

/**
* Called when invalidateOptionsMenu() is triggered
* */
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// if nav drawer is opened, hide the action items
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
//menu.findItem(R.id.action_settings).setVisible(!dr awerOpen);
return super.onPrepareOptionsMenu(menu);
}


/**
* Diplaying fragment view for selected nav drawer list item
* */
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new HomeFragment();
break;
case 1:
fragment = new FindPeopleFragment();
break;
case 2:
fragment = new PhotosFragment();
break;
case 3:
fragment = new CommunityFragment();
break;
case 4:
fragment = new PagesFragment();
break;
case 5:
fragment = new WhatsHotFragment();
break;


default:
break;
}


if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();


// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}


@Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(mTitle);
}


/**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()...
*/


@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}


@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}
}

activity_main.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">


<!-- Framelayout to display Fragments -->
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>


<!-- Listview to display slider menu -->
<ListView
android:id="@+id/list_slidermenu"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:choiceMode="singleChoice"
android:divider="@color/list_divider"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector"
android:background="@color/list_background"
/>
</android.support.v4.widget.DrawerLayout>

Android Mainfest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="info.androidhive.slidingmenu"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="info.androidhive.slidingmenu.SplashScreen"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="info.androidhive.slidingmenu.MainActivity"
android:label="@string/app_name">
</activity>
</application>


</manifest>




ممنون میشم اگر بتونی کمک کنی، من تمام شکم به این دو خط از MainActivity.java هست!!!
getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true);

m_jafari_1370
دوشنبه 13 بهمن 1393, 20:01 عصر
البته اینم کد styles.xml ام هست:

<?xml version="1.0" encoding="utf-8"?><resources xmlns:android="http://schemas.android.com/apk/res/android">
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>


<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:actionBarStyle">@style/MyActionBar</item>
<!-- you should set typeface which you want to override with TypefaceUtil -->
<item name="android:typeface">serif</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#e72020</item>
</style>
<style name="MySpinnerLook" parent="@android:TextAppearance.Widget.TextView.SpinnerIte m">
<item name="android:textSize">10sp</item>
<item name="android:background">#fff</item>
<item name="android:typeface">serif</item>
</style>
</resources>




نمیدونم شاید توی این باید کاری کرد...

esideli
سه شنبه 14 بهمن 1393, 07:10 صبح
سلام دوستان
توی برنامه ی SlidingMenu که قبلا توی این لینک (http://barnamenevis.org/showthread.php?401729-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/page9) موجود بود (آخرین پست) من سعی کردم که منو رو بیارم به سمت راست. منوی مورد نظر رو تونستم از توی فایل XML به سمت راست بیارم ولی دکمه و آیکون اون هنوز همون سمت چپ و توی اکشن بار مونده.
قسمتهایی از کد که احساس میکنم نیاز بوده اینا هستن:
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open,
R.string.drawer_close) {

public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}


public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item != null && item.getItemId() == android.R.id.home) {
if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
// Notice the Gravity.Right
mDrawerLayout.closeDrawer(Gravity.RIGHT);
} else {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
}
return false;
}
};



من توی فروم های خارجی هم خیلی گشتم ولی متاسفانه چیزی مبنی بر جابجایی این آیکون ندیدم. از طرفی توی خیلی از نزم افزارا دیدم که این دکمه بالا سمت راست هست و منو هم سمت راست هست (یعنی کاملا بومی سازی شده واسه فارسی) الان توی برنامه ی من آیکون سمت چپ هست و با کلیک روی اون، منو از سمت راست باز میشه. من میخوام آیکون هم بره سمت راست بالای منو.
کسی پیشنهادی نداره؟ ممنون از همه
این هم عکس مورد نظر و هدفم!

128092

شما می تونی این آیکن سمت چپ رو حذف کنی و جاش یه آیکن شبیهش بزاری سمت راست.

m_jafari_1370
سه شنبه 14 بهمن 1393, 07:40 صبح
شما می تونی این آیکن سمت چپ رو حذف کنی و جاش یه آیکن شبیهش بزاری سمت راست.

خب قربون دستت میتونی یکم راهنمایی کنی؟!
دقیقا چه کنم چیکار کنم... ؟!!!
یا اینکه یه منبع درست درمونی چیزی بهمون بدی بریم بخونیم، والا من از بس که گشتم و سرچ کردم کف اگشت هام مو درآورد و چیزیم پیدا نکردم!!!

esideli
سه شنبه 14 بهمن 1393, 10:26 صبح
خب قربون دستت میتونی یکم راهنمایی کنی؟!
دقیقا چه کنم چیکار کنم... ؟!!!
یا اینکه یه منبع درست درمونی چیزی بهمون بدی بریم بخونیم، والا من از بس که گشتم و سرچ کردم کف اگشت هام مو درآورد و چیزیم پیدا نکردم!!!

خب می تونی یکم از خلاقیتت استفاده کنی :چشمک:. البته خودم هم کلی سرچ و دو به یک کردم تا حساب کار اومد دستم.

توی پوشه menu یه سری فایل xml مربوط به منو و دکمه های اکشن بار هست. فایل xml مربوط به صفحه مورد نظرت رو باز کن و این کدها رو توش بنویس :

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto" >

<item
android:id="@+id/action_menu"
android:orderInCategory="100"
myapp:showAsAction="always"
android:title="منو"
android:icon="@drawable/ic_drawer"/>
</menu>

id توی برنامه شما فرق می کنه و همون رو بزار و icon هم که از اسمش معلومه. اگه همین آیکن رو می خوای که سه تا خط هست این رو سرچ کن : Android_Design_Icons
قاعدتا کد زیر هم باید تو کلاس اکتیویتیت باشه ولی اگه نیست کپی کن ولی بیرون از onCreate . این R.menu.menu هم آدرس فایلی هست که کد بالایی رو توش نوشتی :



@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}



تا اینجا یه دکمه به سمت راست اکشن بار اضافه شده.
کد زیر هم توی اکتیوی بزار تا آیکن سمت چپ حذف بشه :



getSupportActionBar().setDisplayShowHomeEnabled(fa lse);


حالا drawerLayout و listView ای که توی فایل xml اکتیویتیت وارد کردی رو توی کلاس اکتیویتی معرفی می کنی :



بیرون از onCreate//

ListView listMenu;
DrawerLayout drawerLayout;

توی onCreate//

drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
listMenu = (ListView) findViewById(R.id.drawer_list);


الان باید تعیین کنی که زمان کلیک روی دکمه لیست ویو بیاد داخل. متد زیر هم خارج onCreate بزار :



@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
//return super.onOptionsItemSelected(item);


switch (item.getItemId()) {

case R.id.action_menu:
if(drawerLayout.isDrawerOpen(listMenu)){
drawerLayout.closeDrawer(Gravity.RIGHT);
}else{
drawerLayout.openDrawer(listMenu);
}

break;
}

return true;

}


نکته : اگه منوت رو سمت راست نبرده باشی بخاطر این خط drawerLayout.closeDrawer(Gravity.RIGHT); برنامه کرش می کنه.

اینم آدرس برنامه خودمه که توش آیکن رو پیاده سازی کردم. شبیه این میشه البته منذچند تا دکمه دیگه هم اضافه کردم به اکشن بارم:
http://cafebazaar.ir/app/com.ehsan_delgani.koshti/?l=fa

خودم اعصابم خورد شد تا اینارو تو پروژم پیاده کردم. از بس که جستوجو کردم و البته دو به یک!:قهقهه:. امیدوارم کمکتون کنه.

m_jafari_1370
سه شنبه 14 بهمن 1393, 14:02 عصر
خب می تونی یکم از خلاقیتت استفاده کنی :چشمک:. البته خودم هم کلی سرچ و دو به یک کردم تا حساب کار اومد دستم.

توی پوشه menu یه سری فایل xml مربوط به منو و دکمه های اکشن بار هست. فایل xml مربوط به صفحه مورد نظرت رو باز کن و این کدها رو توش بنویس :

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto" >

<item
android:id="@+id/action_menu"
android:orderInCategory="100"
myapp:showAsAction="always"
android:title="منو"
android:icon="@drawable/ic_drawer"/>
</menu>

id توی برنامه شما فرق می کنه و همون رو بزار و icon هم که از اسمش معلومه. اگه همین آیکن رو می خوای که سه تا خط هست این رو سرچ کن : Android_Design_Icons
قاعدتا کد زیر هم باید تو کلاس اکتیویتیت باشه ولی اگه نیست کپی کن ولی بیرون از onCreate . این R.menu.menu هم آدرس فایلی هست که کد بالایی رو توش نوشتی :



@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}



تا اینجا یه دکمه به سمت چپ اکشن بار اضافه شده.
کد زیر هم توی اکتیوی بزار تا آیکن سمت چپ حذف بشه :



getSupportActionBar().setDisplayShowHomeEnabled(fa lse);


حالا drawerLayout و listView ای که توی فایل xml اکتیویتیت وارد کردی رو توی کلاس اکتیویتی معرفی می کنی :



بیرون از onCreate//

ListView listMenu;
DrawerLayout drawerLayout;

توی onCreate//

drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
listMenu = (ListView) findViewById(R.id.drawer_list);


الان باید تعیین کنی که زمان کلیک روی دکمه لیست ویو بیاد داخل. متد زیر هم خارج onCreate بزار :



@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
//return super.onOptionsItemSelected(item);


switch (item.getItemId()) {

case R.id.action_menu:
if(drawerLayout.isDrawerOpen(listMenu)){
drawerLayout.closeDrawer(Gravity.RIGHT);
}else{
drawerLayout.openDrawer(listMenu);
}

break;
}

return true;

}


نکته : اگه منوت رو سمت راست نبرده باشی بخاطر این خط drawerLayout.closeDrawer(Gravity.RIGHT); برنامه کرش می کنه.

اینم آدرس برنامه خودمه که توش آیکن رو پیاده سازی کردم. شبیه این میشه البته منذچند تا دکمه دیگه هم اضافه کردم به اکشن بارم:
http://cafebazaar.ir/app/com.ehsan_delgani.koshti/?l=fa

خودم اعصابم خورد شد تا اینارو تو پروژم پیاده کردم. از بس که جستوجو کردم و البته دو به یک!:قهقهه:. امیدوارم کمکتون کنه.


رفیق خیلی کارت درسته، دمت گرم
باورت نمیشه یک هفته هست توی تمام فروم ها گشتم نتونستم کاری کنم!!! مونده بودم اصلا!!! تشکر فراوان

esideli
سه شنبه 14 بهمن 1393, 14:13 عصر
رفیق خیلی کارت درسته، دمت گرم
باورت نمیشه یک هفته هست توی تمام فروم ها گشتم نتونستم کاری کنم!!! مونده بودم اصلا!!! تشکر فراوان

درکت می کنم. ما برنامه نویسا باید هوای همو داشته باشیم. برای تشکر هم از دکمه تشکر استفاده کنید:چشمک:.

saeid222
یک شنبه 10 اسفند 1393, 10:56 صبح
سلام. توی کد زیر drawer_list چیه ؟


drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

listMenu = (ListView) findViewById(R.id.drawer_list);

esideli
یک شنبه 10 اسفند 1393, 13:03 عصر
سلام. توی کد زیر drawer_list چیه ؟

سلام،
نام لیست ویو ای هست که درون منوی ما نشون داده میشه و در فایل xml قرار داره.

saeid222
دوشنبه 11 اسفند 1393, 10:19 صبح
@Override

public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
//return super.onOptionsItemSelected(item);


switch (item.getItemId()) {

case R.id.action_menu:
if(drawerLayout.isDrawerOpen(listMenu)){

drawerLayout.closeDrawer(Gravity.RIGHT);

}else{
drawerLayout.openDrawer(listMenu);
}

break;
}

return true;

}





الان من منو رو آوردم سمت راست و دکمه منو رو هم آوردم به سمت راست . ولی وقتی روی دکمه کلیک میکنم خطا میده .
من وقتی به این خط میرسم خطا میده :
if(drawerLayout.isDrawerOpen(listMenu)

این دو تا آیتم رو توی سطح کلاس (خارج از onCreate( تعریف کردم .
ListView drawerListMenu;
DrawerLayout drawerLayout;
بعد توی onCreate نوشتم :drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

drawerListMenu = (ListView) findViewById(R.id.drawer_list);


بعد توی onOptionsItemSelected نوشتم:


if (id == R.id.action_menu) {
if (drawerLayout.isDrawerOpen(drawerListMenu)) {
drawerLayout.closeDrawer(Gravity.RIGHT);
} else {
drawerLayout.openDrawer(drawerListMenu);

}
return true;
}



آیا درست عمل کرده ام ؟
خطایی که سیستم میده اینه :
FATAL EXCEPTION: main
java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParam s

مثل اینکه جنس DrawerLayout من و شما فرق داره ؟!

esideli
دوشنبه 11 اسفند 1393, 12:54 عصر
الان من منو رو آوردم سمت راست و دکمه منو رو هم آوردم به سمت راست . ولی وقتی روی دکمه کلیک میکنم خطا میده .
من وقتی به این خط میرسم خطا میده :
if(drawerLayout.isDrawerOpen(listMenu)

این دو تا آیتم رو توی سطح کلاس (خارج از onCreate( تعریف کردم .
ListView drawerListMenu;
DrawerLayout drawerLayout;
بعد توی onCreate نوشتم :drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

drawerListMenu = (ListView) findViewById(R.id.drawer_list);


بعد توی onOptionsItemSelected نوشتم:


if (id == R.id.action_menu) {
if (drawerLayout.isDrawerOpen(drawerListMenu)) {
drawerLayout.closeDrawer(Gravity.RIGHT);
} else {
drawerLayout.openDrawer(drawerListMenu);

}
return true;
}



آیا درست عمل کرده ام ؟
خطایی که سیستم میده اینه :
FATAL EXCEPTION: main
java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParam s

مثل اینکه جنس DrawerLayout من و شما فرق داره ؟!

در تابع onOptionsItemSelected باید یه آرگمان تعریف کنی مثل :

onOptionsItemSelected(MenuItem item)

بعد توی بدنه تابع اون id رو به این صورت عوض کنید حله.



if (item.getItemId() == R.id.action_menu)

saeid222
دوشنبه 11 اسفند 1393, 13:58 عصر
با درود
متن کد رو به این تغییر دادم درست شد .
if (drawerLayout.isDrawerOpen(Gravity.RIGHT)) {
drawerLayout.closeDrawer(Gravity.RIGHT);
} else {
drawerLayout.openDrawer(Gravity.RIGHT);
}



ممنون از توجهت .

حالا میخوام بالای لیست ویو یک عکس و LinearLayout اضافه کنم ولی خطا میده . تا توی xml فایل فقط یه لیست ویو باشه مشکلی نیست ولی تا که چیزای دیگه هم میگذارم میترکه .

esideli
دوشنبه 11 اسفند 1393, 14:41 عصر
تاحالا نیازی بهش پیدا نکردم ولی فکر نمی کنم مشکلی باشه. هر شی رو که اضافه میکنین مطمئن باسید که یک id داشته باشه و شئ های بدون آیدی توی لایوتتون نگزارید.

esideli
دوشنبه 11 اسفند 1393, 14:43 عصر
با درود
متن کد رو به این تغییر دادم درست شد .
if (drawerLayout.isDrawerOpen(Gravity.RIGHT)) {
drawerLayout.closeDrawer(Gravity.RIGHT);
} else {
drawerLayout.openDrawer(Gravity.RIGHT);
}



ممنون از توجهت .

حالا میخوام بالای لیست ویو یک عکس و LinearLayout اضافه کنم ولی خطا میده . تا توی xml فایل فقط یه لیست ویو باشه مشکلی نیست ولی تا که چیزای دیگه هم میگذارم میترکه .

این جوری که شما کردی اگه دکمه های دیگه هم به اکشن بار اضافه بکنی باز هم با کلیک اون ها لیست باز و بسته میشه.