PDA

View Full Version : سه سوال در باره navigation drawer



mr_ayma
دوشنبه 17 خرداد 1395, 19:24 عصر
سلام ، من به کمک این لینک (http://www.esfandune.ir/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%85%D9%86%D9%88-%DA%A9%D8%B4%D9%88%DB%8C-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-navigation-drawer-%DB%8C%DA%A9/)طراحی منوی کشویی رو یاد گرفتم ولی چند سوال برام بی جواب موند

سوال اولم اینکه اگه بخوایم یه منو بالایی داشته باشیم به این صــورت

140745


سوال دومم اینکه در لینک یاد شده ، این سطر مقدار Text منو رو بدست میاره ، ولی اگه بخوایم بر اساس منویی که کلیک شده دستوری بنویسیم که مثلا رویداد کلیک عمل کنه چی کار می کنیم
مثلا اگر روی روی تنظیمات کلیک شده برنامه اکتویتی اول بره و ..



String dokme_txt = getResources().getStringArray(R.array.dokmeha)[post];



سوال سوم : این منویی کشویی به صورت پیش فرض تا صفحه باز میشه ، ایا امکانش هست تعیین کنیم که کشو به اندازه کل صفحه باز بشه یا در محدوده پاییتری کشیده بشه ؟

پی نوشت : تو عکس املای « کلیک میشه » رو اشتباه تایپ کردم که از این بابت معذرت میخوام

Alireza_Ar1
دوشنبه 17 خرداد 1395, 21:36 عصر
سلام
این اشتباه که بخوای برای رفتن به اکتیویتی دیگه مقدار txt بدست بیاری .
https://github.com/keklikhasan/LDrawer ی روش استاندارد برای ساختن Navigation Drawer به اون صورت که میخوای هستش دانلود کن از این لینک استفاده کن.

برای اینکه متوجه بشی کدوم ایتم از Navigatin انتخاب شده کلاست به صورت زیر ایمپلمنت میشه.

public class Main_Act extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener

کد زیر برای بستن منو از طریق Action Barمیباشد که برسی میکند اگر navigatin drawer باز باشد میبند .

@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}




کد زیر ایتم انتخاب شدرو برمیگردونه میریزه آیدیشو داخل یک متغییر


@Override
public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}


و کد زیر Override میکنی برای اینکه بگی وقتی انتخاب شد به کدوم اکتیویتی بره

@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();

if (id == R.id.nav_camera) {
// Handle the camera action
} else if (id == R.id.nav_gallery) {

} else if (id == R.id.nav_slideshow) {

} else if (id == R.id.nav_manage) {

} else if (id == R.id.nav_share) {

} else if (id == R.id.nav_send) {

}

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}اگر متوجه نشدی بگو سرس کاملو برات بفرستم .

mr_ayma
سه شنبه 18 خرداد 1395, 12:56 عصر
سلام
این اشتباه که بخوای برای رفتن به اکتیویتی دیگه مقدار txt بدست بیاری .
https://github.com/keklikhasan/LDrawer ی روش استاندارد برای ساختن Navigation Drawer به اون صورت که میخوای هستش دانلود کن از این لینک استفاده کن.

برای اینکه متوجه بشی کدوم ایتم از Navigatin انتخاب شده کلاست به صورت زیر ایمپلمنت میشه.

public class Main_Act extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener

کد زیر برای بستن منو از طریق Action Barمیباشد که برسی میکند اگر navigatin drawer باز باشد میبند .

@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}




کد زیر ایتم انتخاب شدرو برمیگردونه میریزه آیدیشو داخل یک متغییر


@Override
public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}


و کد زیر Override میکنی برای اینکه بگی وقتی انتخاب شد به کدوم اکتیویتی بره

@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();

if (id == R.id.nav_camera) {
// Handle the camera action
} else if (id == R.id.nav_gallery) {

} else if (id == R.id.nav_slideshow) {

} else if (id == R.id.nav_manage) {

} else if (id == R.id.nav_share) {

} else if (id == R.id.nav_send) {

}

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}اگر متوجه نشدی بگو سرس کاملو برات بفرستم .



بی نهایت بابت ممنون لینک و توضیحات ، حقایق زیادی برام روشن شد :لبخند:
فقط یه سوال ، تو مثال لینک شما زمانی که توسط منوها اکتویتی مقصد لود میشه اکشن
بار و منوها ناپدید میشن . مگر اینکه این تیکه کدهای لی آوت و جاوای Sample رو برا
اکتویتی جدید کپی کنم ، منظورم تکرار این قسمت هاست



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


<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/app_description"/>

</RelativeLayout>

<!-- The navigation drawer -->
<ListView
android:id="@+id/navdrawer"
android:layout_width="@dimen/navdrawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:drawSelectorOnTop="false">
</ListView>

</android.support.v4.widget.DrawerLayout>





و این تیکه از کد جاوا



setContentView(R.layout.activity_second__activty);

ActionBar ab = getActionBar();

ab.setDisplayHomeAsUpEnabled(true);
ab.setHomeButtonEnabled(true);
ab.setDisplayShowCustomEnabled(true);


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


drawerArrow = new DrawerArrowDrawable(this) {
@Override
public boolean isLayoutRtl() {
return false;
}
};
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
drawerArrow, R.string.drawer_open,
R.string.drawer_close) {

public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
invalidateOptionsMenu();
}

public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();


String[] values = new String[]{
"Stop Animation (Back icon)",
"Stop Animation (Home icon)",
"Start Animation",
"Change Color",
"GitHub Page",
"Share",
"Rate"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
mDrawerList.setAdapter(adapter);


mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch (position) {
case 0:
mDrawerToggle.setAnimateEnabled(false);
drawerArrow.setProgress(1f);
startActivity(new Intent(second_Activty.this,SampleActivity.class));
break;
case 1:
mDrawerToggle.setAnimateEnabled(false);
drawerArrow.setProgress(0f);
break;
case 2:
mDrawerToggle.setAnimateEnabled(true);
mDrawerToggle.syncState();
break;
case 3:
if (drawerArrowColor) {
drawerArrowColor = false;
drawerArrow.setColor(R.color.ldrawer_color);
} else {
drawerArrowColor = true;
drawerArrow.setColor(R.color.drawer_arrow_second_c olor);
}
mDrawerToggle.syncState();
break;
case 4:
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/IkiMuhendis/LDrawer"));
startActivity(browserIntent);
break;
case 5:
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
share.putExtra(Intent.EXTRA_SUBJECT,
getString(R.string.app_name));
share.putExtra(Intent.EXTRA_TEXT, getString(R.string.app_description) + "\n" +
"GitHub Page : https://github.com/IkiMuhendis/LDrawer\n" +
"Sample App : https://play.google.com/store/apps/details?id=" +
getPackageName());
startActivity(Intent.createChooser(share,
getString(R.string.app_name)));
break;
case 6:
String appUrl = "https://play.google.com/store/apps/details?id=" + getPackageName();
Intent rateIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(appUrl));
startActivity(rateIntent);
break;
}

}
});
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
mDrawerLayout.closeDrawer(mDrawerList);
} else {
mDrawerLayout.openDrawer(mDrawerList);
}
}
return super.onOptionsItemSelected(item);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
}



همه اینا رو گفتم تا بپرسم ، راهی نیست که اکشن بار با تمام منوهاش و واکنش هاش در همه اکتویتی ها دیده بشه ، بدون اینکه کد تکراری بنویسم ؟

sowieso2020
سه شنبه 27 مهر 1395, 01:50 صبح
با سلام
من برای طراحی صفحه منو اختصاصی و نیز طراحی یک داکت متحرک در یکی از صفحات، می خوام از ناویگیشن دراور استفاده کنم اما نه به صورت یک لیست منظم با آیتم های عمودی بلکه مثلا شامل یک لایوت نصف صفحه با عنصر های سیک بار ، پالت انتخاب رنگ، دکمه و ... می باشد . که به صورت یک لیست عمودی نبوده و مانند یک لایوت معمولی و دلخواه است.
آیا باز می تونم از ناویگیشن دراور استفاده کنم ؟؟
با تشکر

http://uupload.ir/files/pzx5_nav_drawer_سوال.png

suraty
چهارشنبه 28 مهر 1395, 16:47 عصر
سلام،
یکی از راه های استفاده از اکشن بار در تمام اکتیویتی ها، استفاده از فرگمنت هاست.
به صورت کلی :
کلی صفحه به غیر از اکشن بار رو در یک فریم لایوت قرار می دهید.
اکتیویتی های دیگر در واقع اکستند شده از فرگمنت هستند!
با کلیک روی یک دکمه فرگمنت ها را لود می کنید. (Replace)
مثلا افزودن فرگمنت چیزی شبیه به کد زیر می تواند باشد:


Fragment fragment = new Fragment();
fm.beginTransaction().add(R.id.frame, fragment, "MY_FRAGMENT").commit();

sowieso2020
یک شنبه 02 آبان 1395, 00:51 صبح
سلام،
یکی از راه های استفاده از اکشن بار در تمام اکتیویتی ها، استفاده از فرگمنت هاست.
به صورت کلی :
کلی صفحه به غیر از اکشن بار رو در یک فریم لایوت قرار می دهید.
اکتیویتی های دیگر در واقع اکستند شده از فرگمنت هستند!
با کلیک روی یک دکمه فرگمنت ها را لود می کنید. (Replace)
مثلا افزودن فرگمنت چیزی شبیه به کد زیر می تواند باشد:

ممنون. اما من اکشن بار و تایتل بار رو در برنامه م حذف کردم . اما فعلا در مورد popup window مطالبی پیدا کردم که فکر کنم به راحتی کاری که میخوام رو انجام بده...
تست میکنم و جواب رو اینجا میزارم.
با تشکر.