آموزش ساخت دیالوگ سفارشی در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ساخت دیالوگ سفارشی در برنامه نویسی اندروید می پردازیم این بار در دیالوگ ها از tab استفاده خواهیم کرد در ادامه می توانید پیش نمایشی از آن را مشاهده کنید با ما همراه باشید.
به علت بالا بودن حجم پیش نمایش آن در لینک زیر مشاهده کنید.
لینک نمایش
مثل همیشه برای استفاده از این کتاب خانه عمل می کنیم.
ابتدا وارد فایل Build.gradle از نوع Top Level شده سپس در بخش repositories خط زیر را اضافه کنید چون درمخزن jitpack قرار دارد این کار را انجام می دهیم.
1 | maven { url "https://jitpack.io" } |
سپس وارد فایل Build.gradle از نوع Module شده و در بخش dependencies خط زیر را اضافه کنید.
1 | compile 'com.github.ashishbhandari:AndroidTabbedDialog:v1.1' |
حالا پروژه را sync کنید علت خطاهای احتمالی گریدل را قبلی بررسی کرده ایم.
ابتدا یک فایل به نام tab_one_layout.xml در layout خود ایجاد کرده و کد های زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Small Text" android:id="@+id/text_view" /> </LinearLayout> </ScrollView> |
این بخش همان بخش Tab ما می شود .
سپس کد مربوط به activity_main.xml همانند زیر می شود فقط یک دکمه در اکتیویتی اصلی قرار می دهیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?xml version="1.0" encoding="utf-8"?> <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="com.androidifygeeks.tabdialogs.MainActivity"> <Button android:id="@+id/testbutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="Dialog with tabs" /> </RelativeLayout> |
و در آخر هم کد مربوط به MainActivity.java هم همانند زیر می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | package ir.programchi; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import com.androidifygeeks.library.fragment.PageFragment; import com.androidifygeeks.library.fragment.TabDialogFragment; import com.androidifygeeks.library.iface.IFragmentListener; import com.androidifygeeks.library.iface.ISimpleDialogCancelListener; import com.androidifygeeks.library.iface.ISimpleDialogListener; import java.util.HashSet; import java.util.Set; public class MainActivity extends AppCompatActivity implements ISimpleDialogListener, ISimpleDialogCancelListener, IFragmentListener { private static final int REQUEST_TABBED_DIALOG = 42; private static final String TAG = MainActivity.class.getSimpleName(); private final Set<Fragment> mMyScheduleFragments = new HashSet<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.testbutton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TabDialogFragment.createBuilder(MainActivity.this, getSupportFragmentManager()) .setTitle("Title") .setSubTitle("Subtitle") .setTabButtonText(new CharSequence[]{"Tab1", "Tab2"}) .setPositiveButtonText("Ok") .setNegativeButtonText("Cancel") .setNeutralButtonText("Neutral") .setRequestCode(REQUEST_TABBED_DIALOG) .show(); } }); } @Override public void onCancelled(int requestCode) { switch (requestCode) { case REQUEST_TABBED_DIALOG: Toast.makeText(MainActivity.this, "Dialog cancelled", Toast.LENGTH_SHORT).show(); break; default: break; } } @Override public void onNegativeButtonClicked(int requestCode) { if (requestCode == REQUEST_TABBED_DIALOG) { Toast.makeText(MainActivity.this, "Negative button clicked", Toast.LENGTH_SHORT).show(); } } @Override public void onNeutralButtonClicked(int requestCode) { if (requestCode == REQUEST_TABBED_DIALOG) { Toast.makeText(MainActivity.this, "Neutral button clicked", Toast.LENGTH_SHORT).show(); } } @Override public void onPositiveButtonClicked(int requestCode) { if (requestCode == REQUEST_TABBED_DIALOG) { Toast.makeText(MainActivity.this, "Positive button clicked", Toast.LENGTH_SHORT).show(); } } @Override public void onFragmentViewCreated(Fragment fragment) { int selectedTabPosition = fragment.getArguments().getInt(PageFragment.ARG_DAY_INDEX, 0); View rootContainer = fragment.getView().findViewById(R.id.root_container); Log.i(TAG, "Position: " + selectedTabPosition); switch (selectedTabPosition) { case 0: selectedTabPositionZeroCase(rootContainer); break; case 1: selectedTabPositionOneCase(rootContainer); break; default: break; } } private void selectedTabPositionZeroCase(View rootContainer) { // add view in container for first tab View tabProductDetailLayout = getLayoutInflater().inflate(R.layout.tab_one_layout, (ViewGroup) rootContainer); TextView textView = (TextView) tabProductDetailLayout.findViewById(R.id.text_view); textView.setText("hello: tab1"); } private void selectedTabPositionOneCase(View rootContainer) { // add view in container for second tab View tabProductDetailLayout2 = getLayoutInflater().inflate(R.layout.tab_one_layout, (ViewGroup) rootContainer); TextView textView1 = (TextView) tabProductDetailLayout2.findViewById(R.id.text_view); textView1.setText("hello: tab2"); } @Override public void onFragmentAttached(Fragment fragment) { mMyScheduleFragments.add(fragment); } @Override public void onFragmentDetached(Fragment fragment) { mMyScheduleFragments.remove(fragment); } } |
این آموزش هم به پایان رسید.
موفق و موید باشید.
سلام
من مشکل سینک کردن دارم
میشه اسم یه ف*یل*ترش*کن خوب به غیر از ه*ات* ا*س**پا*ت شیلد رو برام معرفی کنید
تشکر فراوان.
سلام لطفا در اینترنت بررسی کنید و نام آنها را نیز نیاورید با تشکر
سلام
جدا از ا ین کتابخانه ، من دیالوگ رو به روش معمول نوشتم، اما می خواهم دیالوگ از چپ باز بشه و از سمت راست بسته بهشه باید چکار کنم.
ممنون میشم توضیح دهید
یک پست در این مورد قرار میدهیم باید با انیمیشن کار کنید.
سلام ، خسته نباشید.
من یک دیالوگ فرگمنت ساختم (شامل یه کلاس اکستند شده از دیالوگ فرگمنت و یه لایه xml مورد نظر) که با هر بار کلیلک بر روی یک ویو نمایش داده میشه . مشکل اینجاس که روی برخی گوشی ها ( api های متوسط مثلا اندروید ۴.۴ ) هنگام نمایش دیالوگ روی صفحه یک نوار سفید که فکر میکنم اکشن بارش باشه بالای دیالوگ نشون داده میشه و نما رو خراب میکنه ، گویا حذف اکشن بار بدرستی اعمال نمیشه و یه نوار سفید نشون میده در صورتی که تو api های بالا و جدید (مثلا اندروید ۶ )درست کار میکنه و چیزی بالای دیالوگ نشون نمیده .
کدی مثل …getActionbar.hide() هم توی آنکریت کلاس نوشتم ارور نال میده . توی منیفست هم نمیشه کاری کرد چون کلاس اکستند از دیالوگ فرگمنته نمیشناسش واسه اینکه از اون طریق هم بخوام مجدد حذف کنم .
اگه امکانش هست لطفا راهنمایی کنید .ممنون.
سلام و درود باید style برای این منظور تعریف کنید به احتمال زیاد در حال استفاده از Inflater هستید ولی اصلا امکان پذیر نیست که یک Actionbar در Dialog از نوع فرگمنت نمایش داده شود حتی خودتان اشاره کردید که در زمان استفاده از متد hide مربوط به actionbar خطای null گرفتید کد خودتان را به صورت یک سوال در وب سایت ثبت کنید تا بررسی شود.
موفق باشید.
با سلام. من تمام مراحل رو رفتم و حتی کدهای گیت هاب رو هم بررسی کردم اما کتابخانه مشکل داره. واین خط ارور میده. ممنون میشم زلهنمایی بفرمایید.
java.lang.NoSuchMethodError: No virtual method setOnTabSelectedListener(Landroid/support/design/widget/TabLayout$OnTabSelectedListener;)V in class Landroid/support/design/widget/TabLayout; or its super classes (declaration of ‘android.support.design.widget.TabLayout’
و در gradle من :
implementation ‘com.android.support:appcompat-v7:28.0.0’
implementation ‘com.android.support.constraint:constraint-layout:1.1.3’
implementation ‘com.android.support:design:28.0.0’