متریال دیزاین ـ کار با SwipeRefreshLayout
تا به حال نرم افزار های زیادی از قبیل توییتر(twitter) , گوگل پلاس (+google) , جیمیل (gmail) را در اندروید دیدهایم که باswipe/pull down ( کشیدن صفحه به سمت پایین) محتوای خود را بروز میکنند . زمانی که صفحه را از بالا به پایین میکشیم یک محتوای جدیدی به ما نشان داده میشود یا اینکه محتوای قبلی بروزرسانی خواهد شد. در این آموزش میخواهیم کار با SwipeRefreshLayout را آموزش دهیم. این لایه به ما کمک میکند که طراحی اصولی (material design) و کاربر پسندی را در برنامه های خود داشته باشیم.
با صفر تا قهرمان (zeroToHero) همراه باشید تا بیشتر با SwipeRefreshLayout آشنا شویم.
این لایه از کتابخانهی زیر است.
android.support.v4.widget
در مرحله ی اول کد xml این لایه را درون برنامه وارد میکنیم.
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mySwipe" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- کد خود را اینجا وارد کنید--> </android.support.v4.widget.SwipeRefreshLayout>
در کد بالا ما لایهی SwipeRefreshLayout را به عنوان لایهی پدر یا ریشه استفاده کرده ایم و درون آن میتوانیم لایه ها و عناصر دیگر را به کار ببریم.
به عنوان مثال میتوان به صورت زیر نوشت.
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mySwipe" android:layout_width="match_parent" android:layout_height="match_parent" > <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="من یک متن هستم" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:gravity="center"/> </ScrollView> </android.support.v4.widget.SwipeRefreshLayout>
معمولا درون این لایه یک recyclerView یا listView به کار میرود که در صورت تازه سازی (refresh) مقادیر آیتم ها دچار تغییر شوند(آیتم جدیدی وارد لیست شده یا از آن حذف شود). همچنین این لایه میتواند به عنوان یک لایه ی فرزند ظاهر شود.
حالا نوبت این است که در اکتیویتی (activity) خود این لایه را وصل کنیم و از آن استفاده کنیم.
public class MainActivity extends AppCompatActivity { SwipeRefreshLayout mySwipe; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mySwipe = (SwipeRefreshLayout) findViewById(R.id.mySwipe); mySwipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { //اعمالی را که میخواهیم هنگام تازه سازی انجام شود mySwipe.setRefreshing(false); } }); } }
داخل کد بالا ما با صدا زدن متد setOnRefreshListener با ورودی رابط (interface) OnRefreshListener میتوان متد onRefresh را بازنویسی (override) کرده و داخل آن هر عملی که برای تازه سازی لازم است انجام داد. برای مثال زمانی که ما برنامه ای متصل به اینترنت داریم و میخواهیم با swipe کردن مقادیر را بروزرسانی کنیم در متد onRefresh میتوانیم وضعیت اتصال به اینترنت را چک کنیم و اگر متصل بود دیتا را از اینترنت دریافت کرده و مقادیر محتوای صفحه را بروزرسانی کنیم. در اخر کد با نوشتن mySwipe.setRefreshing(false) انیمیشن ایجاد شده را متوقف میکنیم.
اگر در جایی از برنامه بخواهیم خاصیت swipe pull down و انیمیشن را غیر فعال کنیم میتوانیم از دستور setEnabled(false) استفاده کنیم.
در مقالات بعدی ZeroToHero با ما همراه باشید تا دیگر عناصر طراحی اصولی (material design) را مورد بررسی قرار دهیم.
موفق باشید.
مطالب زیر را حتما مطالعه کنید
آموزش Gradle – اهمیت Project Automation
درک مفهوم کدنویسی تمیز در اندروید
5 هک ساده برای کاهش سایز فایل APK
آشنایی با RecyclerView در اندروید
Open/Closed Principle در قوانین Solid
توابع در زبان برنامه نویسی Kotlin
2 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
بسیار ساده شیک و عالی
فقط ای کاش طریقه UPSWIPE هم توضیح میدادید این فقط DOWNSWIPE میکنه
سلام دوست عزیز.
تا جایی که بنده اطلاع دارم swipRefreshLayout برای downSwip بکار میره و برای upSwip باید با توجه به لیستمون اونو به صورت دستی هندل کنیم. چون این مقاله صرفا برای swipRefreshLayout بود از بیان اون صرف نظر کردیم. اگر به نحوهی کار upSwip علاقه دارید سوالتون رو داخل انجمن مطرح کنید.
موفق باشید