سایر مقالات این دسته
تاریخچه و خصوصیات اندرویداجزای تشکیل دهنده سیستم عامل اندرویدآشنایی با API های اندرویدایجاد،ساخت و اجرای اولین برنامه اندرویدیکار با دکمه ها در اندرویدکار با تکست باکس ها در اندرویدکار با تکست ویو در اندرویدکار با گرید ویو در اندرویدکار با وب ویو در اندرویدکار با اسکرول ویو در اندرویدکار با اسکرول ویو افقیکار با الرت دیالوگ (AlertDialog)در اندرویدکار با ایمیج باتن(Image Button) در اندرویدکار با توگل باتنکار با چک باکس (Checkbox) در اندرویدکار با الرت دیالوگ (AlertDialog)در اندروید قسمت دوکار با ریتینگ بار(Rating bar) در اندرویدرفتن از یک اکتویتی به اکتویتی دیگرکار با نوتیفیکیشن ها (Notifications )در اندرویدکار با صوت در برنامه نویسی اندرویدکار با ویبره(Vibrator) در اندرویدکار با دوربین در اندرویدکار با دوربین در اندرویدکار با ویدیو ویو (VideoView)در اندرویدکار با شبکه وای فای (Wifi)در اندرویدکار با لیست ویو (ListView) در اندرویدکار با سیک بار (SeekBar) در اندرویدکار با دکمه بازگشت در اندرویدکار با AutoCompleteTextView در اندرویدتغییر فونت در اندرویدکار با لایه TableLayout در اندرویدکار با لیست کشویی (Spinner) در اندرویدکار با CalendarView در اندرویدساخت شمارنده در اندرویدکار با title bar در اندرویدکار با منو (Menu)در اندرویدکار با لیست ویو (Listview) قسمت دومطراحی رابط کاربری در اندروید قسمت اولطراحی رابط کاربری در اندروید قسمت دوم(طراحی گرد)کار با استایل در اندرویدکار با لایه AbsoluteLayout در اندرویدطراحی رابط کاربری در اندروید کار با gradientکار با کلیپ بورد(ClipBoard)در اندروید کار با مولتی تاچ(Multitouch ) در اندروید+سورس کدکار با OnLongClick در اندرویدکار با منوی زمینه (ContextMenu ) در اندرویدکار با حرکات (Gesture) در اندرویدکار با (AudioCapture) در اندروید+سورس کدکار با موتور Speech در اندروید + سورسکار با PhoneCall در اندرویدساخت لیست ویو سفارشی در اندروید+سورسساخت Toastسفارشی در اندرویدانتقال برنامه به حافظه sdکار با TextWatcher در اندروید+سورستغییر رنگ محیط Eclipse طراحی رابط کاربری در اندروید کار با Canvasساخت اکشن بار سفارشی در اندروید+سورسساخت الرت دیالوگ سفارشی در اندرویدساخت برنامه نمایش مقدار شارژ باتری در اندرویدایجاد افکت رنگی بروی تصاویر در اندروید+سورسساخت آپشن منوی سفارشی در اندروید+سورسساخت دکمه سه بعدی با Selectorسخنان بزرگان برنامه نويسيوارد كردن پروژه در محيط ايكليپساضافه کردن switch,case به لیست ویوبارش برف بروی تصویر + سورسکار با فیلتر hue رنگی کردن تصویر انتخاب و پخش فایل صوتی از حافظه گوشی+سورساضافه کردن چک باکس به لیست ویوکار با ShelfView یا نمایش کتابخانه ای + سورسکار با TabHost،اضافه کردن تب به برنامه های اندرویدآموزش کامل ساخت اکشن بار سفارشی+سورسساخت برنامه های واکنش گرا(ریسپانسیو) در اندرویدقسمت دوم صفحات 7 اینچ به بالااضافه کردن انیمیشن به دکمه+سورسکار با View Switcher در اندروید + سورسکار با فیلتر Blur Mask + سورسدانلود پک کامل آیکون های طراحی اندرویدکار با sharedPreferences در اندروید+سورسآموزش کار با proguard،محافظت از برنامه اندرویدپخش فایل صوتی (MP3) از ادرس اینترنتی+سورسپخش ویدیو از آدرس اینترنتی(URL) در اندروید+سورسگوشی های و تبلت های مطرح تا چینی به ساده ترین روشپاسخ به رویداد های WebVeiw دسترسی به وب ویو با استفاده از جاوااسکریپتساخت ExpandableListView به ساده ترین شکل+سورسکار با WIFI اکسس+سورسساخت تقویم هجری برای اندروید+سورسapp rateدانلود و نمایش تصویر در ListView+سورسدانلود و نمایش فایل متنی+سورسکار با کلاس های پایه اکتیویتیآینه کردن تصویر+سورسافزودن آیتم منو سفارشی بهActionBar+سورسارسال اطلاعات از دیتابیس به GridView + سورسدسترسی به Api هایREST قسمت اولتغییر فونت لیست ویوفعال سازی و معرفی بخش های Android developer options بخش اول کار با JSON در اندرویدآموزش ساده نصب شبیه ساز اندروید Genymotion

حلقه های تکرار در ++C
1395/11/20

اکشن بار در زامارین
1395/11/13

معرفی وب سرویس ها در زامارین
1395/11/12

عملگرها در زبان ++C
1395/11/06

ایجاد آسان فرم ثبت نام با PHP/MySQL به صورت Ajax
1395/11/06

ساخت تقویم هجری برای اندروید+سورس


رضا نقی لو 1394/11/21

به نام خدا.در این جلسه می خواهیم با نحوه ساخت برنامه تقویم هجری با استفاده از کتابخانه آن شنا بشیم.این اموزش به ما با نحوه استفاده از یک کتابخانه  با اضافه کردن اون به برنامه هامون بیشتر کمک میکنه.برای شروع کار ابتدا کتابخانه را از لینک ضمیمه آموزش دانلود کنید و به محیط برنامهتون ایمپورت کنید. بعد از ایمپورت کردن کتابخانه نیاز داریم تا ان را به برنامه خودمون متصل کنیم،برای اینکار بر روی پروژه ای که ایجاد کردیم کلیک راست کرده و گزینه Properties را انتخاب کرده و وارد شاخه اندروید شده و از سربرگ Library گزینه Add رو کلیک میکنم.و در صفحه باز شده لیست کتاب خانه های را میتوانیم ببینم.

 

سپس یک پروژه جدید ایجاد می کنیم،در داخل لایه برنامه از دوتا لایه استفاده خواهیم کرد.یکی از لایه ها برای نمایش تقویم و دکمه های برنامه و لایه دیگری برای ساخت یک تقویم سفارشی.(کدهای کامل لایه activity_main.xm).

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<LinearLayout
android:id="@+id/calendar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>

<LinearLayout
android:id="@+id/button_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
android:id="@+id/customize_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/customize" />

<Button
android:id="@+id/show_dialog_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/show_dialog" />
</LinearLayout>

<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>

بعد از تکمیل لایه اصلی برنامه،یک لایه جدید با نام custom_cell.xml ایجاد میکنم.(کدهای لایه custom_cell.xml).

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_cell"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/cell_bg"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp" >

<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</LinearLayout>

در ادامه وارد کلاس های جاوا می شیم و کدهای مربوط به فراخوانی کتابخانه و استفاده اون در برنامه خودمون رو اضافه میکنم.بر روی تمامی کدها نحوه کار و عملکرد هر دستور توضیح داده شدهاست.(کدهای کامل کلاس CaldroidSampleActivity).

 import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.sahaab.hijri.caldroid.CaldroidFragment;
import com.sahaab.hijri.caldroid.CaldroidListener;
import com.sahaab.hijricalsample.R;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

@SuppressLint("SimpleDateFormat")
public class CaldroidSampleActivity extends FragmentActivity {
private boolean undo = false;
private CaldroidFragment caldroidFragment;
private CaldroidFragment dialogCaldroidFragment;

private void setCustomResourceForDates() {
Calendar cal = Calendar.getInstance();

// تاریخ حداقل 7 روز گذشته
cal.add(Calendar.DATE, -18);
Date blueDate = cal.getTime();

// تاریخ حداکثر 7روز آینده
cal = Calendar.getInstance();
cal.add(Calendar.DATE, 16);
Date greenDate = cal.getTime();

if (caldroidFragment != null) {
caldroidFragment.setBackgroundResourceForDate(R.color.blue,
blueDate);
caldroidFragment.setBackgroundResourceForDate(R.color.green,
greenDate);
caldroidFragment.setTextColorForDate(R.color.white, blueDate);
caldroidFragment.setTextColorForDate(R.color.white, greenDate);
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy");

// راه اندازی فراگمنتهای کتابخانه
caldroidFragment = new CaldroidFragment();


if (savedInstanceState != null) {
caldroidFragment.restoreStatesFromKey(savedInstanceState,
"CALDROID_SAVED_STATE");
}
// If activity is created from fresh
else {
Bundle args = new Bundle();
Calendar cal = Calendar.getInstance();
args.putInt(CaldroidFragment.MONTH, cal.get(Calendar.MONTH) + 1);
args.putInt(CaldroidFragment.YEAR, cal.get(Calendar.YEAR));
args.putBoolean(CaldroidFragment.ENABLE_SWIPE, true);
args.putBoolean(CaldroidFragment.SIX_WEEKS_IN_CALENDAR, true);


caldroidFragment.setArguments(args);
}

setCustomResourceForDates();

// متصل کردن فراگمنت ها
FragmentTransaction t = getSupportFragmentManager().beginTransaction();
t.replace(R.id.calendar1, caldroidFragment);
t.commit();

// راه اندازی لیسنر ها
final CaldroidListener listener = new CaldroidListener() {

@Override
public void onSelectDate(Date date, View view) {
Toast.makeText(getApplicationContext(), formatter.format(date),
Toast.LENGTH_SHORT).show();

}

@Override
public void onChangeMonth(int month, int year) {
String text = "month: " + month + " year: " + year;
Toast.makeText(getApplicationContext(), text,
Toast.LENGTH_SHORT).show();
}

@Override
public void onLongClickDate(Date date, View view) {
Toast.makeText(getApplicationContext(),
"Long click " + formatter.format(date),
Toast.LENGTH_SHORT).show();
}

@Override
public void onCaldroidViewCreated() {
if (caldroidFragment.getLeftArrowButton() != null) {
Toast.makeText(getApplicationContext(),
"Caldroid view is created", Toast.LENGTH_SHORT)
.show();
}
}

};

// راه اندازی کتابخانه
caldroidFragment.setCaldroidListener(listener);

final TextView textView = (TextView) findViewById(R.id.textview);

final Button customizeButton = (Button) findViewById(R.id.customize_button);

// سفارشی سازی تقویم
customizeButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (undo) {
customizeButton.setText(getString(R.string.customize));
textView.setText("");

// تنظیمات مجدد تقویم
caldroidFragment.clearDisableDates();
caldroidFragment.clearSelectedDates();
caldroidFragment.setMinDate(null);
caldroidFragment.setMaxDate(null);
caldroidFragment.setShowNavigationArrows(true);
caldroidFragment.setEnableSwipe(true);
caldroidFragment.refreshView();
undo = false;
return;
}
undo = true;
customizeButton.setText(getString(R.string.undo));
Calendar cal = Calendar.getInstance();

// تاریخ حداقل 7 روز گذشته
cal.add(Calendar.DATE, -7);
Date minDate = cal.getTime();

// تاریخ حداکثر 7روز آینده
cal = Calendar.getInstance();
cal.add(Calendar.DATE, 14);
Date maxDate = cal.getTime();

// افزودن تاریخ انتخاب شده
cal = Calendar.getInstance();
cal.add(Calendar.DATE, 2);
Date fromDate = cal.getTime();

// به روز
cal = Calendar.getInstance();
cal.add(Calendar.DATE, 3);
Date toDate = cal.getTime();

// غیرفعال کردن تاریخ
ArrayList<Date> disabledDates = new ArrayList<Date>();
for (int i = 5; i < 8; i++) {
cal = Calendar.getInstance();
cal.add(Calendar.DATE, i);
disabledDates.add(cal.getTime());
}

// سفارشی سازی
caldroidFragment.setMinDate(minDate);
caldroidFragment.setMaxDate(maxDate);
caldroidFragment.setDisableDates(disabledDates);
caldroidFragment.setSelectedDates(fromDate, toDate);
caldroidFragment.setShowNavigationArrows(false);
caldroidFragment.setEnableSwipe(false);

caldroidFragment.refreshView();

// Move to date
// cal = Calendar.getInstance();
// cal.add(Calendar.MONTH, 12);
// caldroidFragment.moveToDate(cal.getTime());

String text = "Today: " + formatter.format(new Date()) + "\n";
text += "Min Date: " + formatter.format(minDate) + "\n";
text += "Max Date: " + formatter.format(maxDate) + "\n";
text += "Select From Date: " + formatter.format(fromDate)
+ "\n";
text += "Select To Date: " + formatter.format(toDate) + "\n";
for (Date date : disabledDates) {
text += "Disabled Date: " + formatter.format(date) + "\n";
}

textView.setText(text);
}
});

Button showDialogButton = (Button) findViewById(R.id.show_dialog_button);

final Bundle state = savedInstanceState;
showDialogButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// راه اندازی کتابخانه جهت استفاده در دیالوگ
dialogCaldroidFragment = new CaldroidFragment();
dialogCaldroidFragment.setCaldroidListener(listener);

// If activity is recovered from rotation
final String dialogTag = "CALDROID_DIALOG_FRAGMENT";
if (state != null) {
dialogCaldroidFragment.restoreDialogStatesFromKey(
getSupportFragmentManager(), state,
"DIALOG_CALDROID_SAVED_STATE", dialogTag);
Bundle args = dialogCaldroidFragment.getArguments();
if (args == null) {
args = new Bundle();
dialogCaldroidFragment.setArguments(args);
}
} else {
// Setup arguments
Bundle bundle = new Bundle();
// Setup dialogTitle
dialogCaldroidFragment.setArguments(bundle);
}

dialogCaldroidFragment.show(getSupportFragmentManager(),
dialogTag);
}
});
}

/**
* Save current states of the Caldroid here
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);

if (caldroidFragment != null) {
caldroidFragment.saveStatesToKey(outState, "CALDROID_SAVED_STATE");
}

if (dialogCaldroidFragment != null) {
dialogCaldroidFragment.saveStatesToKey(outState,
"DIALOG_CALDROID_SAVED_STATE");
}
}

}

بعد از نوشتن کدهای اکتیوتی اصلی برنامهريالنیاز داریم تا برای برنامه یک کلاس آداپتر ایجاد کنیم تا به تقویم اندروید قابلیت نمایش تقوم هجری را هم داده باشیم.(کدهای کامل کلاس CaldroidSampleCustomAdapter).

 import hirondelle.date4j.DateTime;

import java.util.HashMap;

import com.sahaab.hijri.caldroid.CaldroidFragment;
import com.sahaab.hijri.caldroid.CaldroidGridAdapter;
import com.sahaab.hijricalsample.R;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class CaldroidSampleCustomAdapter extends CaldroidGridAdapter {

public CaldroidSampleCustomAdapter(Context context, int month, int year,
HashMap<String, Object> caldroidData,
HashMap<String, Object> extraData) {
super(context, month, year, caldroidData, extraData);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View cellView = convertView;

// برای استفاده مجدد
if (convertView == null) {
cellView = inflater.inflate(R.layout.custom_cell, null);
}

int topPadding = cellView.getPaddingTop();
int leftPadding = cellView.getPaddingLeft();
int bottomPadding = cellView.getPaddingBottom();
int rightPadding = cellView.getPaddingRight();

TextView tv1 = (TextView) cellView.findViewById(R.id.tv1);
TextView tv2 = (TextView) cellView.findViewById(R.id.tv2);

tv1.setTextColor(Color.BLACK);

// Get dateTime of this cell
DateTime dateTime = this.datetimeList.get(position);
Resources resources = context.getResources();

// انتخاب رنگ برای نمایش ماه قبل و بعد
if (dateTime.getMonth() != month) {
tv1.setTextColor(resources
.getColor(R.color.caldroid_darker_gray));
}

boolean shouldResetDiabledView = false;
boolean shouldResetSelectedView = false;

// Customize for disabled dates and date outside min/max dates
if ((minDateTime != null && dateTime.lt(minDateTime))
|| (maxDateTime != null && dateTime.gt(maxDateTime))
|| (disableDates != null && disableDates.indexOf(dateTime) != -1)) {

tv1.setTextColor(CaldroidFragment.disabledTextColor);
if (CaldroidFragment.disabledBackgroundDrawable == -1) {
cellView.setBackgroundResource(R.drawable.disable_cell);
} else {
cellView.setBackgroundResource(CaldroidFragment.disabledBackgroundDrawable);
}

if (dateTime.equals(getToday())) {
cellView.setBackgroundResource(R.drawable.red_border_gray_bg);
}

} else {
shouldResetDiabledView = true;
}

// سفارشی سازی تاریخ انتخابی
if (selectedDates != null && selectedDates.indexOf(dateTime) != -1) {
if (CaldroidFragment.selectedBackgroundDrawable != -1) {
cellView.setBackgroundResource(CaldroidFragment.selectedBackgroundDrawable);
} else {
cellView.setBackgroundColor(resources
.getColor(R.color.caldroid_sky_blue));
}

tv1.setTextColor(CaldroidFragment.selectedTextColor);

} else {
shouldResetSelectedView = true;
}

if (shouldResetDiabledView && shouldResetSelectedView) {
// سفارشی سازی تاریخ امروز
if (dateTime.equals(getToday())) {
cellView.setBackgroundResource(R.drawable.red_border);
} else {
cellView.setBackgroundResource(R.drawable.cell_bg);
}
}

tv1.setText("" + dateTime.getDay());
tv2.setText("Hi");
cellView.setPadding(leftPadding, topPadding, rightPadding,
bottomPadding);

//انتخاب رنگ درصورت نیاز
setCustomResources(dateTime, cellView, tv1);

return cellView;
}

}

و در آخر هم ساخت کلاس جهت نمایش اکتیوتی فراگمنت ها(CaldroidSampleCustomFragment).

 import com.sahaab.hijri.caldroid.CaldroidFragment;
import com.sahaab.hijri.caldroid.CaldroidGridAdapter;

public class CaldroidSampleCustomFragment extends CaldroidFragment {

@Override
public CaldroidGridAdapter getNewDatesGridAdapter(int month, int year) {
// TODO Auto-generated method stub
return new CaldroidSampleCustomAdapter(getActivity(), month, year,
getCaldroidData(), extraData);
}

}

منبع کتابخانه و نمونه برنامه

لینک دانلود کتابخانه و نمونه برنامه تقویم هجری برای اندروید

 

فایلهای ضمیمه
توجه! هیچ فایل ضمیمه ای برای این مطلب یافت نشد
درباره نویسنده
admin2
رضا نقی لو
androiddev60@gmail.com
نظرات شما
نظر جدید
    User name
    ناشناس

    چقدر بد توضيح داده اين متاسفاده

    اصلا معلوم نيست بايد چكار كنيم؟

    1395/06/08 1:44 PM