Standart ravishda, ProgressBar aylanadigan halqa(aylana)dir, lekin uni gorizontal chiziq(tasma) ko'rinishiga keltirish mumkin. Buning uchun style atributini qo'shish va gorizontal uslubni tanlash kifoya:
ProgressBar ikkita ishlash rejimini qo'llab-quvvatlaydi: deterministik va aniqlanmagan.
Aniqlanmagan rejim ish(masalan, yuklab olish)ga qancha vaqt ketishini bilmaslik uchun ishlatiladi. Standart ravishda, ProgressBar aniqlanmagan rejimdan foydalanadi va ishning nechi foizi(qismi) bajarilganligini ko'rsatmasdan takrorlanadigan animatsiyasini namoyish etadi.
Deterministik rejim ishning borishini ko'rsatish kerak bo'lganda ishlatiladi. Masalan, faylni yuklab olish foizi. Siz progressni XML orqali yoki java kodi orqali o'rnatishingiz mumkin.
XML orqali.
activity_main.xml kodida android:progress atributini qo'shishingiz va progress darajasini aniqlashingiz kerak:
MainActivity.java faylida ProgressBar nusxasini aniqlashingiz kerak, so'ngra progress qiymati berilgan setProgress() metodi yordamida progressni ko'rsatishingiz kerak:
Assalomu alaykum. Bugun sizlar bilan birgalikda CheckedTextView bilan tanishib olamiz. Va albatta Android Studio-da ba'zi kodlar misolida CheckedTextView bilan ishlaymiz.
CheckedTextView bu matn bilan birga matnga tasdiqlash katagini qo'shish imkoniyatiga ega elementdir. Bu setChoiceModeCHOICE_MODE_NONE-dan boshqasiga o'rnatilgan ListView-da ishlatilganda foydalidir. Masalan, siz CheckedTextView-dan ro'yxat tuzishingiz mumkin, unda ro'yxatdagi qaysi element(masalan, rejalar)lar bajarilgan va qaysi biri bajarilmaganligini belgilashingiz mumkin.
CheckedTextView bilan ishlashda ba'zi muhim atributlar:
android:checkMark - katakcha sifatida drawable-ni o'rnatadi.
android:checked - tasdiqlash katakchasining holatini true bo'lsa tanlangan, agar false bo'lsa, tanlanmaganga o'zgartiradi.
Shuningdek, katakchaning holatini va tasvirini java kodida ham o'zgartirish mumkin. Buni setCheckMarkDrawable() metodi yordamida amalga oshirish mumkin:
setChecked() metodi yordamida tasdiqlash katagi holatini o'zgartirishingiz mumkin:
CheckedTextView textView = findViewById(R.id.checked_tv);
textView.setChecked(true); // katakchani faol holatga o'rnatish
textView.setChecked(false); // katakchani nofaol holatga o'rnatish
isChecked() metodi yordamida katakchaning joriy holatini bilib olishingiz mumkin, bu tasdiqlash katagi faol bo'lsa true, agar faol bo'lmasa false.
Eslatma: elementni bosish bilan siz katakchaning holatini o'zgartira olmaysiz, o'zgartirish uchun esa siz OnClickListener tinglovchisini yaratishingiz kerak bo'ladi.
final CheckedTextView textView = findViewById(R.id.checked_tv);
textView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View view) {
if (textView.isChecked()) {
textView.setChecked(false);
textView.setCheckMarkDrawable(android.R.drawable.checkbox_off_background);
} else {
textView.setChecked(true);
textView.setCheckMarkDrawable(android.R.drawable.checkbox_on_background);
}
}
});
Endi siz elementni bosish bilan katakchaning holatini o'zgartira olasiz:
Eslatma: katakchani java kodida o'zgartirsangiz ham, activity_main.xml fayliga android:checkMark atributini qo'shishingiz kerak bo'ladi.
Sizlarga ulashmoqchi bo'lgan ma'lumotlarim shulardan iborat edi. Sizlarga foydali bo'ldi degan umiddaman. Ko'proq ma'lumot olish uchun:
Assalomu alaykum. Bugun sizlar bilan birgalikda Android Studio-da AudioManager sinfi bilan ishlaymiz.
Siz o’z ilovangizda kerak bo’lganda ovoz rejimlarini (ovozsiz, vibratsiya, ovoz va boshqalar) osongina boshqarishingiz mumkin. Buning uchun Android ushbu boshqaruv elementlari bilan ishlash uchun AudioManager sinfini taqdim etadi.
AudioManager sinfidan foydalanish uchun avval AudioManager sinfining ob'ektini yaratib, getSystemService() metodini chaqirish kerak:
AudioManager sinfi ob'ektining nusxasini yaratgandan so'ng, qurilmangizning ovoz yoki qo'ng'iroq ovozini o'rnatish uchun setRingerMode metodidan foydalanishingiz mumkin:
setRingerMode metodi parametr sifatida butun sonni oladi. Turli xil rejimlarni farqlash uchun har bir rejimga butun son beriladi:
RINGER_MODE_VIBRATE ( = 1): Ushbu rejim qurilmada vibratsiya rejimini o'rnatadi(yoqadi).
RINGER_MODE_NORMAL ( = 2): Ushbu rejim qurilmada ovoz(normal) rejimini o'rnatadi(yoqadi).
RINGER_MODE_SILENT ( = 0): Ushbu rejim qurilmada ovozsiz rejimini o'rnatadi(yoqadi).
Rejimni o'rnatganingizdan so'ng tizim(qurilmaning ovoz rejimi)ning joriy holatini olish uchun getRingerMode() metodini chaqirishingiz mumkin:
int mode = mAudioManager.getRingerMode();
Endi Android Studio-da ishlashni boshlaylik. Hozirgi yaratadigan ilovamizda AudioManager sinfidan foydalanishni ko’rib chiqamiz. Ya’ni qurilma uchun turli xil qo'ng'iroq yoki qurilma ovoz rejimlarini o'rnatishga imkon beradigan ilova yaratamiz.
Demak, boshladik.
Android Studio-da yangi ilova yarating. Ovoz rejimlarini boshqarish uchun 3 ta tugma qo’shing. Buning uchun activity_main.xml faylini quyidagicha o’zgartiring:
Assalomu alaykum. Bugun sizlar bilan birgalikda Android Studio-da TextToSpeech sinfi bilan qanday ishlashni o'rganib olamiz.
Android matnni ovozga aylantirishga imkon beradi. Android matnni ovozga aylantirish uchun TextToSpeech sinfini taqdim etadi. Ushbu sinfdan foydalanish uchun siz ushbu sinf ob'ektini o'rnatishingiz va initListener-ni aniqlashingiz kerak:
t1 = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
}
});
Ushbu tinglovchida TextToSpeech ob'ekti uchun uning tili kabi xususiyatlarini ko'rsatishingiz kerak.Til setLanguage() metodini chaqirish orqali o'rnatilishi mumkin:
t1.setLanguage(Locale.ENGLISH);
setLanguage metodi parametr sifatida Locale ob'ektini oladi. Mavjud ba'zi Localelarning ro'yxati bilan tanishing:
UK
US
CANADA_FRENCH
ITALY
GERMANY
CHINA
JAPAN
Tilni o'rnatganingizdan so'ng, matnni o'qish(ovozga aylantirish) uchun sinfning speak() metodini chaqirishingiz mumkin:
TextToSpeech sinfida speak() metodidan tashqari yana bir qancha metodlar mavjud. Ba'zilari bilan quyida tanishishigiz mumkin:
addSpeech(String text, String filename): Ushbu usul matn qatori va ovozli fayl o'rtasida bog'lanishni qo'shadi.
getLanguage(): Ushbu metod tilni tavsiflovchi Locale namunasini qaytaradi.
setSpeechRate(float speechRate): Ushbu metod nutq tezligini belgilaydi.
shutdown(): Ushbu metod TextToSpeech foydalanadigan resurslarni yopadi.
stop(): bu metod gapirishni to'xtatadi.
Endi Android Studio-da ishlashni boshlaylik. Hozir yaratadigan ilovamizda TextToSpeech sinfidan foydalanishni o'rganib olamiz. Ilovamizda matn kiritish uchun EditText-dan foydalanamiz. Matnni kiritgandan so'ng matnni ovozga aylantirish uchun tugma qo'shamiz. Demak, boshladik.
Android Studio-da yangi ilova yarating. activity_main.xml faylini quyidagicha o'zgartiring:
Bu kodda yuqorida aytilgan metodlardan foydalanilgan.
Endi ilovani ishga tushiring:
Endi matn maydoniga bir nechta so'z yoki matnni kiriting va "TINGLASH" tugmasini bosing. Kiritilgan matnni ko'rsatuvchi xabar chiqadi va siz matn(so'z)ni inglizcha talaffuzini eshitishingiz mumkin. Chunki biz java kodida setLanguage(Locale.ENGLISH) qilib ingliz tilini tanlagandik. Siz o'zingiz boshqa tilni tanlashingiz mumkin:
Sizlarga ulashmoqchi bo'lgan ma’lumotlarim shulardan iborat edi. Sizlarga foydali bo’ldi degan, umiddaman. Ko'proq ma'lumot olish uchun:
Assalomu alaykum. Bugun sizlar bilan birgalikda Android Studio-da Bluetooth bilan ishlashni o'rganib olamiz. Demak, boshladik.
Bluetooth - bu ikki qurilma o'rtasida ma'lumotlarni yuborish yoki qabul qilish usuli. Android platformasi Bluetooth freymvorkini qo'llab-quvvatlaydi, bu esa ilovada qurilmaga boshqa Bluetooth qurilmalari bilan simsiz ma'lumot almashish imkonini beradi.
Quyidagi turli xil operatsiyalarni bajarish uchun Android Bluetooth API-ni taqdim etadi.
Boshqa Bluetooth qurilmalarini qidirish.
Ulangan qurilmalar ro'yxatini olish.
Boshqa qurilmalarga ulanish.
Android Bluetooth bilan aloqa qilish uchun BluetoothAdapter sinfini taqdim etadi. getDefaultAdapter() statik usulini chaqirish orqali uning ob'ekti yaratiladi:
private BluetoothAdapter BA;
BA = BluetoothAdapter.getDefaultAdapter();
Qurilmada Bluetooth-ni yoqish uchun Intent bilan birga Bluetooth doimiysi ACTION_REQUEST_ENABLE –ni chaqirish kerak:
Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(turnOn, 0);
Ushbu doimiy(konstanta)dan tashqari, turli xil vazifalarni bajarishni qo'llab-quvvatlaydigan API bilan ta'minlangan boshqa doimiylar mavjud. Ular quyida keltirilgan:
ACTION_REQUEST_DISCOVERABLE: Ushbu konstanta Bluetooth-ni topish uchun ishlatiladi.
ACTION_STATE_CHANGED: Ushbu konstanta Bluetooth holatining o'zgarishi to'g'risida xabar beradi.
ACTION_FOUND: Ushbu konstanta har bir topilgan qurilma haqida ma'lumot olish uchun ishlatiladi.
Bluetooth-ni yoqgandan so'ng, getBondedDevices() usulini chaqirib, bog'langan qurilmalar ro'yxatini olishingiz mumkin. Bunda bluetooth qurilmalar ro’yxati qaytariladi:
Bluetooth-ni ko'proq boshqarish imkoniyatini beradigan boshqa metodlar ham mavjud:
enable(): Ushbu usul adapter yoqilmagan bo'lsa, adapterni yoqadi.
isEnabled(): Agar adapter yoqilgan bo'lsa, bu usul true qiymatini qaytaradi.
disable(): Ushbu usul adapterni o'chiradi.
getName(): Ushbu usul Bluetooth adapterining nomini qaytaradi.
setName(String name): Ushbu usul Bluetooth nomini o'zgartiradi.
getState(): Ushbu usul Bluetooth adapterining joriy holatini qaytaradi.
startDiscovery(): Ushbu usul 120 soniya davomida Bluetooth-ni topish jarayonini boshlaydi.
Demak, Android Studio-da Bluetooth bilan ishlashni boshlaylik. Ushbu hozir yaratadigan ilovamiz Bluetooth-ni boshqarish va Bluetooth orqali bog'langan qurilmalar ro'yxatini ko'rsatish uchun BluetoothAdapter sinfidan foydalaniladi.
Android Studio-da yangi ilova yarating va uni “Bluetooth” deb nomlang. activity_main.xml faylini quyidagicha o’zgartiring:
Agar sizni qurilmangizda Bluetooth yoqilmagan bo’lsa, sizdan Bluetooth-ni yoqish uchun ruxsat so'raydi:
Endi “KO’RINADIGAN QILISH” tugmasini bosing. Qurilmani boshqa Bluetooth qurilmalari uchun 120 soniyaga ko’rinadigan qilish uchun sizning ruxsatingizni so'ragan quyidagi dialog oynasi paydo bo'ladi:
Endi “QURILMALAR RO’YXATI” tugmasini bosing. U listView-da bog'langan qurilmalarning ro'yxatini ko'rsatadi. Menda faqat bitta ulangan qurilma bor:
Endi Bluetooth-ni o'chirib qo’yish uchun “O'CHIRISH” tugmasini bosing. Bluetooth-ni o'chirganingizda, Bluetooth o'chirilganligini ko'rsatuvchi quyidagi xabar paydo bo'ladi:
Sizlarga ulashmoqchi bo'lgan ma’lumotlarim shulardan iborat edi. Sizlarga foydali bo’ldi degan, umiddaman.
"ONE MILLION UZBEK CODERS" BILAN YANGI MARRALARNI ZABT ETING!
Assalomu alaykum. Bugun sizlar bilan birgalikda Android Studio-da dialog(muloqot) oynalarini yaratishni o'rganib olamiz. Demak, boshladik.
AlertDialog komponentasi DialogFragment fragment sinfi bilan birgalikda maxsus dialog oynalarini yaratish uchun ishlatiladi. Keling, ularni ko'rib chiqaylik.
Android Studio-da yangi ilova yarating. Dastlab, yangi CustomDialogFragment nomlangan fragment sinfini qo'shing. Uning kodini quyidagicha o'zgartiring:
package com.example.android.dialogfragment;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
public class CustomDialogFragment extends DialogFragment {
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
return builder.setTitle("Muloqot oynasi").setMessage("Oynani yopish uchun OK tugmasini bosing").create();
}
}
Fragment klassi o'z hayot sikli bilan barcha standart fragment funktsiyalarini o'z ichiga oladi, ammo DialogFragment sinfidan meros bo'lib o'tadi, bu esa qo'shimcha funktsiyalarni qo'shadi. Va uni yaratish uchun biz ikkita usuldan foydalanishimiz mumkin:
Dialog ob'ektini qaytaradigan onCreateDialog() metodini bekor qilish.
Standart onCreateView() metodidan foydalanish.
OnCreateDialog() metodi dialog oynasini yaratish uchun AlertDialog.Builder sinfidan foydalanadi. Uning metodlaridan foydalanib, siz dialog oynasining ko'rinishini sozlashingiz mumkin:
setTitle: oynaning sarlavhasini o'rnatadi.
setView: oyna interfeysi layout-ini o'rnatadi.
setIcon: oyna ikonkasini o'rnatadi.
setPositiveButton: amalni tasdiqlash tugmachasini o'rnatadi.
setNeutralButton: tasdiqlash yoki bekor qilishdan farq qilishi mumkin bo'lgan "neytral" tugmachani o'rnatadi.
setNegativeButton: bekor qilish tugmachasini o'rnatadi.
setMessage: dialog oynasining matnini o'rnatadi, lekin setView-dan foydalanishda bu usul ixtiyoriy yoki agar biz shunchaki xabarni ko'rsatishni xohlasak, uni alternativ deb hisoblashimiz mumkin.
create: oyna yaratadi.
Bizni kodda, dialog oynasida faqat xabar ko'rsatiladi.
Dialog oynasini chaqirish uchun activity_main.xml faylida tugmachani qo'shing:
MainActivity kodida dialog oynasini ishga tushiradigan tugmacha uchun metodni aniqlang:
package com.example.android.dialogfragment;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void showDialog(View v) {
CustomDialogFragment dialog = new CustomDialogFragment();
dialog.show(getSupportFragmentManager(), "custom");
}
}
Dialog oynasini chaqirish uchun CustomDialogFragment fragment ob'ekti yaratiladi, so'ngra unga show() metodi chaqiriladi. Ushbu metodga FragmentManager va teg parametr sifatida beriladi.
Ilovani ishga tushirib natijani ko'ring:
Endi dialog oynasini biroz sozlaymiz(o'zgartiramiz). Bu uchun CustomDialogFragment sinfidagi onCreateDialog metodini quyidagicha o'zgartiring:
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
return builder
.setTitle("Muloqot oynasi")
.setIcon(android.R.drawable.ic_dialog_alert)
.setMessage("Oynani yopish uchun OK tugmasini bosing")
.setPositiveButton("OK", null)
.setNegativeButton("Bekor qilish", null)
.create();
}
Bu kodda biz android.R.drawable.ic_dialog_alert resursini rasm sifatida ishlatadigan va ikkita tugmachani o'rnatadigan layoutni qo'shamiz.
Ilovani ishga tushiring va natijani ko'ring:
Endi res/layout papkasiga yangi dialog.xml faylini qo'shing:
Assalomu alaykum. Bugun sizlar bilan birgalikda DatePickerDialog va TimePickerDialog nima ekanligini bilib olamiz va Android Studio-da ulardan foydalangan holda oddiy ilova yaratamiz.
Android-da sana va vaqtni tanlashga imkon beradigan ikkita DatePickerDialog va TimePickerDialog dialog oynalari mavjud.
Sana belgilashdan tashqari, DatePickerDialog OnDateChangedListener va OnDateSetListener tinglovchilari yordamida sanani boshqarish imkonini beradi.
Xuddi shu tarzda, TimePickerDialog sizga OnTimeChangedListener va OnTimeSetListener tinglovchilaridan foydalanib vaqtni boshqarish imkoniyatini beradi.
Ushbu komponentlar bilan ishlashda DatePickerDialog-dagi oylarni hisoblash noldan boshlanishini, ya'ni yanvar 0, dekabr esa 11 raqami ekanini yodda tutish kerak. Va shunga o'xshash ravishda TimePickerDialog-da soniya va daqiqalarni hisoblash 0 dan 59 gacha boradi va soat - 0 dan 23 gacha.
Demak, ilovamizda DatePickerDialog va TimePickerDialog-dan foydalanishni boshladik.
Android Studio-da yangi ilova yarating. activity_main.xml faylini quyidagicha o'zgartiring:
package com.example.android.datepickerdialogtimepickerdialog;
import androidx.appcompat.app.AppCompatActivity;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity {
TextView currentDateTime;
Calendar dateAndTime = Calendar.getInstance();
@Override
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
setContentView(R.layout.activity_main);
currentDateTime = findViewById(R.id.current_date_time);
setInitialDateTime();
}
// sanani tanlash oynasini ko'rsatish
public void setDate(View v) {
new DatePickerDialog(MainActivity.this, d,
dateAndTime.get(Calendar.YEAR),
dateAndTime.get(Calendar.MONTH),
dateAndTime.get(Calendar.DAY_OF_MONTH))
.show();
}
// vaqtni tanlash uchun dialog oynasini ko'rsatish
public void setTime(View v) {
new TimePickerDialog(MainActivity.this, t,
dateAndTime.get(Calendar.HOUR_OF_DAY),
dateAndTime.get(Calendar.MINUTE), true)
.show();
}
// boshlang'ich sana va vaqtni aniqlash
private void setInitialDateTime() {
currentDateTime.setText(DateUtils.formatDateTime(this,
dateAndTime.getTimeInMillis(),
DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR
| DateUtils.FORMAT_SHOW_TIME));
}
// vaqtni boshqarishni sozlash
TimePickerDialog.OnTimeSetListener t = new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
dateAndTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
dateAndTime.set(Calendar.MINUTE, minute);
setInitialDateTime();
}
};
// sanani boshqarishni sozlash
DatePickerDialog.OnDateSetListener d = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
dateAndTime.set(Calendar.YEAR, year);
dateAndTime.set(Calendar.MONTH, monthOfYear);
dateAndTime.set(Calendar.DAY_OF_MONTH, dayOfMonth);
setInitialDateTime();
}
};
}
Bu kodni tushuntirib bersam.
Asosiy sinf java.util.Calendar bo'lib, u Java standart sinf kutubxonasida saqlanadi. SetInitialDateTime() usulida biz ushbu sinfning ekzemplyaridan dateAndTime.getTimeInMillis() millisekundlar sonini olamiz va formatlashdan foydalanib matn maydoniga chiqarib qo'yamiz.
Tugmani bosganda chaqiriladigan setDate() metodi sana tanlash uchun oynani aks ettiradi. Oyna yaratilganda, uning ob'ektiga DatePickerDialog.OnDateSetListener uzatiladi, bu esa matn maydonidagi sanani o'zgartiradi.
Xuddi shunday, setTime() metodi ham vaqtni tanlash uchun oynani aks ettiradi. Oyna ob'ekti TimePickerDialog.OnTimeSetListener-ni ishlatadi, bu matn maydonidagi vaqtni o'zgartiradi.
Endi, ilovani ishga tushiring va natijani ko'ring:
Masalan, "SANANI O'ZGARTIRISH" tugmasini bosing:
Sanani o'zgartirib qo'ying. Masalan, men 2021 yil 1-yanvarni tanlab OK tugmasini bosdim:
Natijada matn maydonidagi sana o'zgaradi:
Sizlarga ulashmoqchi bo'lgan ma’lumotlarim shulardan iborat edi. Sizlarga foydali bo’ldi degan, umiddaman.
"ONE MILLION UZBEK CODERS" BILAN YANGI MARRALARNI ZABT ETING!
Assalomu alaykum. Bugun sizlar bilan birgalikda Android Studio-da kiritilgan raqamga qo'ng'iroq qiluvchi oddiy ilova yaratamiz.
Android OS bilan ishlaydigan gadjetlarning aksariyati mobil telefonlardir yoki telefon va planshetlar kabi ovozli qo'ng'iroqlarni qo'llab-quvvatlaydi. Android telefonning ba'zi funktsiyalarini bajarishga imkon beradigan kerakli API-ni taqdim etadi. Demak, boshladik.
Avval Android Studio-da yangi ilova yarating va "Telefon" deb nomlang. activity_main.xml fayliga raqamni kiritish uchun matn maydoni va to'g'ridan-to'g'ri qo'ng'iroq qilish uchun tugma qo'shing:
Bu kodda qo'ng'iroqni boshlash uchun Intent ob'ektidan Intent.ACTION_DIAL parametri hamda telefon raqamdan foydalanilgan. Ammo, bu holda, raqamni kiritgandan so'ng va tugmani bosgandan so'ng, biz telefon raqamini kiritish uchun standart ekranga o'tamiz, u yerda raqam allaqachon kiritiladi va siz faqat qo'ng'iroq tugmachasini bosishingiz kerak bo'ladi:
Raqamni kiritib, Qo'ng'iroq qilish tugmasini bosing.
Ammo natijada ko'rinib turibdiki, bu ish har doim ham qulay emas, chunki foydalanuvchi o'zimiz yaratgan ilovadagi "QO'NG'IROQ QILISH" tugmasini bossa to'g'ridan-to'g'ri terilgan raqamga qo'ng'iroq qilinmaydi. Ammo siz ushbu muammoni Intent.ACTION_DIAL o'rniga Intent.ACTION_CALL -dan foydalanib tuzating:
public void dial(View v) {
EditText number = findViewById(R.id.number);
String toDial = "tel:" + number.getText().toString();
startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(toDial)));
}
Endi AndroidManifest.xml faylida ruxsatni qo'shishingiz kerak:
Assalomu alaykum. Bugun sizlar bilan birgalikda PagerTitleStrip va PagerTabStrip haqida ma'lumotga ega bo'lamiz. Va PagerTitleStrip va PagerTabStrip deyarli bir xil bo'lganliklari sababli Android Studio-da faqat PagerTabStrip bilan ishlaymiz.
Oxirgi maqolamda biz bir sahifadan boshqa sahifaga ekranni chapga yoki o'ngga surish orqali o'tishni qanday yaratishni ko'rib chiqgandik. Keling endi, sahifalarga sarlavhalar qo'shamiz, ular orqali qo'shimcha ravishda sahifalar bo'ylab harakatlanishimiz mumkin.
Sarlavha qo'shish uchun PagerTitleStrip va PagerTabStrip elementlaridan foydalanishimiz mumkin. Ikkalasining asosiy farqi shundaki, PagerTabStrip-dagi sarlavhalar aslida interfaol yorliq(tugma)lar bo'lib, biz ularni ma'lum bir sahifaga o'tish uchun bosishimiz mumkin. Va PagerTitleStrip elementida barcha sarlavhalar faqat statik matndir.
Hozir biz PagerTabStrip-dan foydalanamiz. Buning uchun oldingi maqolamda tayyorlangan ilovadan foydalanamiz.
Android Studio-da oldingi maqolamda yaratgan ilovamizni ochamiz. Demak kod yozishni boshladik.
Birinchidan, activity_main.xml faylini quyidagicha o'zgartiramiz:
PageFragment fragmentining kodini sahifalarning sarlavhasini o'rnatish uchun quyidagicha o'zgartiramiz:
package com.example.android.viewpager;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
public class PageFragment extends Fragment {
private int pageNumber;
public static PageFragment newInstance(int page) {
PageFragment fragment = new PageFragment();
Bundle args = new Bundle();
args.putInt("num", page);
fragment.setArguments(args);
return fragment;
}
public PageFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pageNumber = getArguments() != null ? getArguments().getInt("num") : 1;
}
static String getTitle(Context context, int position) {
return "Sahifa " + String.valueOf(position + 1);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View result = inflater.inflate(R.layout.fragment_page, container, false);
TextView pageHeader = result.findViewById(R.id.display_text);
pageHeader.setText("Fragment " + String.valueOf(pageNumber + 1));
return result;
}
}
Bu kodda biz getTitle() usulini qo'shdik, uning vazifasi sahifa sarlavhasini o'rnatishdir.
Endi MyAdapter adapterining kodini o'zgartiramiz:
package com.example.android.viewpager;
import android.content.Context;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
public class MyAdapter extends FragmentPagerAdapter {
private Context context;
public MyAdapter(Context context, FragmentManager mgr) {
super(mgr);
this.context = context;
}
@Override
public int getCount() {
return (10);
}
@Override
public Fragment getItem(int position) {
return (PageFragment.newInstance(position));
}
@Override
public String getPageTitle(int position) {
return (PageFragment.getTitle(context, position));
}
}
getPageTitle() metodi yordamida PagerTabStrip-dagi yorliq uchun sarlavhani qaytarishimiz mumkin. Aslida metodda sarlavhani o'rnatish uchun getTitle() metodini chaqiramiz.
Nihoyat, MainActivity.java kodida onCreate metodini biroz o'zgartirib qo'yamiz:
Assalomu alaykum. Bugun sizlar bilan birgalikda Android Studio-da ViewPager bilan ishlaymiz. Demak, boshladik.
Deyarli barcha mobil ilovalarda chapga va o'ngga aylantirilishi mumkin bo'lgan sahifalar to'plami mavjud. Android ilovalarda shunga o'xshash effektlar yaratish uchun ViewPager elementidan foydalanishingiz mumkin. Sahifa effektini yaratish uchun fragmentlardan foydalaniladi.
Android Studioda yangi ilova yarating. Sahifani aks ettiradigan fragment uchun res/layout papkasiga layout faylini qo'shing. Keyin uni fragment_page.xml deb nomlang va unga quyidagi kodni kiriting:
Fragmentda sahifa raqami ko'rsatilgan matn maydoni ko'rsatiladi.
Endi loyihaga fragment sinfini qo'shing. Uni PageFragment deb nomlang:
package com.example.android.viewpager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
public class PageFragment extends Fragment {
private int pageNumber;
public static PageFragment newInstance(int page) {
PageFragment fragment = new PageFragment();
Bundle args=new Bundle();
args.putInt("num", page);
fragment.setArguments(args);
return fragment;
}
public PageFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pageNumber = getArguments() != null ? getArguments().getInt("num") : 1;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View result=inflater.inflate(R.layout.fragment_page, container, false);
TextView pageHeader= result.findViewById(R.id.display_text);
String header = String.format("Fragment %d", pageNumber+1);
pageHeader.setText(header);
return result;
}
}
pageNumber o'zgaruvchisi joriy sahifa raqamiga ishora qiladi. Sahifa raqami newInstance() metodi orqali uzatiladi. Raqam "num" argumentiga qiymat qo'shish orqali beriladi.
Keyin onCreate() metodida fragment yaratishda ushbu raqam "num" argumentidan chiqariladi (agar argumentlar aniqlangan bo'lsa):
OnCreateView() metodida natijada paydo bo'lgan sahifa raqami matn maydonida ko'rsatiladi.
O'z-o'zidan fragment hali sahifa navigatsiya funksiyasini yaratmaydi. Buning uchun bizga PagerAdapter sinflaridan biri kerak. Android SDK ikkita o'rnatilgan PagerAdapter-ni o'z ichiga oladi: FragmentPagerAdapter va FragmentStatePagerAdapter sinflari.
FragmentPagerAdapter xotirada ishlatiladigan fragmentlarning butun sonini saqlaydi va shuning uchun dastur oz sonli sahifaga ega bo'lsa, mos keladi. Va FragmentStatePagerAdapter klassi xotirada faqat joriy, oldingi va keyingi sahifalarni saqlaydi (agar mavjud bo'lsa). Shu sababli u xotiradan tejamkorroq foydalanadi, lekin shu bilan birga biroz sekinroq ishlaydi. Hozir biz FragmentPagerAdapter sinfidan foydalanamiz.
Biroq, har ikkala sinf ham abstrakt, shuning uchun biz ularni to'g'ridan-to'g'ri ishlata olmaymiz va boshqa sinfni yaratishimiz kerak.
Buning uchun loyihaga MyAdapter degan yangi sinf qo'shing:
package com.example.android.viewpager;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
public class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager mgr) {
super(mgr);
}
@Override
public int getCount() {
return(10);
}
@Override
public Fragment getItem(int position) {
return(PageFragment.newInstance(position));
}
}
FragmentPagerAdapter sinfida ikkita metod aniqlangan:
getCount(): ViewPager-dagi sahifalar sonini qaytaradi (bizda 10).
getItem(int position): position parametri sifatida berilgan sahifa raqami bo'yicha, fragment ob'ektini qaytaradi.