View Full Version : نحوه تغییر فونت actionbar.title و DrawerLayout
r_khan
شنبه 24 اسفند 1392, 10:09 صبح
با سلام
چطور میتونم فونت actionbar.title و DrawerLayout رو تغییر بدهم ؟
smemamian
شنبه 24 اسفند 1392, 12:03 عصر
سلام
برای تغییر فونت Actionbar نیاز هست که یه کلاس extends شده از TextView ایجاد کنی و در داخل اون
تابع setTypeface رو فراخوانی کنی. نکته ی مهمی که باید توجه داشته باشی این هست که در تابع
setTypeface باید یه متغیر استاتیک قرار بدی تا فونت تغییر کنه.
بعد این TextView که سفارشی کردید رو باید در Layout مخصوص به ActionBar فراخوانی کنید.
من این کار رو با فونت bbadr.ttf برات انجام دادم :
http://upload7.ir/imgs/2014-03/52687830656170298716.jpg
دریافت کد نمونه :
http://www.uplooder.net/cgi-bin/dl.cgi?key=ec2b3d531c4d80fb65d17f4adcc89b1b
r_khan
شنبه 24 اسفند 1392, 12:22 عصر
ممنون که پاسخ دادید . من از این روش استفاده کردم و از actionbar.title هم استفاده کردم که جدا از customview می باشد . برای actionbar.title که نمی خوام از customview استفاده کنم . راهی هست که فونت رو تغییر بدم .
در ضمن از navigation layout استفاده میکنم میخوام فونت های ایتم های اونم تغییر بدم.
r_khan
شنبه 24 اسفند 1392, 13:04 عصر
تغییر فونت
navigation layout رو تونستم حل کنم اول یه کلاس میسازیم که از Textview مشتق میشه در داخل ان کلاس میتوانیم Textview شخصی سازی کنیم .
به صورت زیر
public class MyTextView : TextView
{
public MyTextView(Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle)
{
init();
}
public MyTextView(Context context, IAttributeSet attrs) : base(context, attrs)
{
init();
}
public MyTextView(Context context) : base(context)
{
init();
}
private void init()
{
if (!IsInEditMode)
{
Typeface tf = Typeface.CreateFromAsset(Context.Assets, "font/Mj_Casablanca.TTF");
Typeface = tf;
}
}
}
و بعد هر
Textview که دوست داشته باشیم میتوانیم به کلاسی که درست کردیم نسبت بدیم
به صورت زیر
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
<MyTextView
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center"
android:paddingLeft="@dimen/marginList"
android:paddingRight="@dimen/marginList"
android:textColor="#fff"
android:textSize="@dimen/textSize"
android:background="?android:attr/activatedBackgroundIndicator"
android:minHeight="?android:attr/listPreferredItemHeightSmall" />
</LinearLayout>
مشکل تغییر فونت actionbar.title هنوز حل نشده . دوستان کمک کنند.
rubiks.kde
شنبه 24 اسفند 1392, 14:04 عصر
برای دستیابی به textview آکشن بار میتونید اول اون رو پیدا کنید و بعد فونت و هر خصوصیتی که خواستید رو تغییر بدید.
int titleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android"); if(titleId == 0)
titleId = com.actionbarsherlock.R.id.abs__action_bar_title;
حالا با id پیدا شده به این صورت عمل کنید(کد بالا هم برای پیدا کردن تایتل اکشن بار آندروید و هم اکشن بار شرلوک قابل استفاده است)
TextView mAppName = (TextView) findViewById(titleId); mAppName.setTypeface(Utils.getTypeface());
mAppName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
mAppName.setText(Utils.Reshape(mAppName.getText(). toString()));
mAppName.setShadowLayer(2, 1, 1, Color.parseColor("#000000"));
mAppName.setTextColor(Color.parseColor("#f4f5ef"));
r_khan
شنبه 24 اسفند 1392, 14:44 عصر
برای دستیابی به textview آکشن بار میتونید اول اون رو پیدا کنید و بعد فونت و هر خصوصیتی که خواستید رو تغییر بدید.
int titleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android"); if(titleId == 0)
titleId = com.actionbarsherlock.R.id.abs__action_bar_title;
حالا با id پیدا شده به این صورت عمل کنید(کد بالا هم برای پیدا کردن تایتل اکشن بار آندروید و هم اکشن بار شرلوک قابل استفاده است)
TextView mAppName = (TextView) findViewById(titleId); mAppName.setTypeface(Utils.getTypeface());
mAppName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
mAppName.setText(Utils.Reshape(mAppName.getText(). toString()));
mAppName.setShadowLayer(2, 1, 1, Color.parseColor("#000000"));
mAppName.setTextColor(Color.parseColor("#f4f5ef"));
ممنون مشکلم حل شد
البته یه راه حل دیگه هم هست
استفاده از TypefaceSpan که از کلاس MetricAffectingSpan مشتق میشه
بدین صورت
public class TypefaceSpan : MetricAffectingSpan
{
private Typeface mTypeface;
public TypefaceSpan(Context context, String typefaceName) {
if (mTypeface == null) {
mTypeface = Typeface.CreateFromAsset(context.ApplicationContex t.Assets, "font/Mj_Casablanca.TTF");
// Cache the loaded Typeface
}
}
#region implemented abstract members of CharacterStyle
public override void UpdateDrawState (TextPaint tp)
{
tp.SetTypeface(mTypeface);
tp.Flags = tp.Flags | PaintFlags.SubpixelText;
}
#endregion
#region implemented abstract members of MetricAffectingSpan
public override void UpdateMeasureState (TextPaint p)
{
p.SetTypeface(mTypeface);
p.Flags = p.Flags | PaintFlags.SubpixelText;
}
#endregion
/// <summary>
/// An <code>LruCache</code> for previously loaded typefaces. </summary>
}
وطریقه استفاده هم به صورت زیر است
SpannableString st1 = new SpannableString(title);
st1.SetSpan(new TypefaceSpan(this, "MyTypeface.otf"), 0, st1.Length(), SpanTypes.ExclusiveExclusive);
Java.Lang.ICharSequence sequence1;
sequence1 = st1.SubSequenceFormatted(0, st1.Length());
ActionBar.TitleFormatted = sequence1;
البته راه حل جناب rubiks.kde راحتر و ساده تر هستش
r_khan
یک شنبه 25 اسفند 1392, 08:43 صبح
فونت actionbar.title رو تغییر میدم actionbar.title وسط از لحاظ عمودی قرار نمیگیره
از LayoutParams هم استفاده کردم نشد! چه کنم وسط از لحاظ عمودی قرار بگیره؟
rubiks.kde
یک شنبه 25 اسفند 1392, 09:13 صبح
فونت actionbar.title رو تغییر میدم actionbar.title وسط از لحاظ عمودی قرار نمیگیره
از LayoutParams هم استفاده کردم نشد! چه کنم وسط از لحاظ عمودی قرار بگیره؟
این مشکل از خود فونت است.من هم چنین مشکلی داشتم .بعضی از فونت ها درست و بعضی هم میرفتن بالاتر.
به هرحال اگه راه حلی یافتید قرار بدید.
r_khan
یک شنبه 25 اسفند 1392, 09:51 صبح
این مشکل از خود فونت است.من هم چنین مشکلی داشتم .بعضی از فونت ها درست و بعضی هم میرفتن بالاتر.
به هرحال اگه راه حلی یافتید قرار بدید.
من از ایکن هم در actionbar استفاده کردم و برای اینکه title بالا نره گفتم height رو از height ایکن بخونه به صورت زیر
mAppName.SetHeight ((int)Resources.GetDrawable(Resource.Drawable.ic_l auncher).MinimumHeight);
اینجوری برای من درست کار کرد .
به نظر شما این کار درسته؟
sco1385
جمعه 23 خرداد 1393, 00:57 صبح
جناب روبیک!
کدهای شما را باید در چه فایلی و در کدام قسمت قرار داد؟
لطفاْ کامل و ساده توضیح بدید، ممنون
rubiks.kde
جمعه 23 خرداد 1393, 10:44 صبح
جناب روبیک!
کدهای شما را باید در چه فایلی و در کدام قسمت قرار داد؟
لطفاْ کامل و ساده توضیح بدید، ممنون
توی اکتویتی که اکشن بار دارید(اکشن بار باید یا با شرلوک نوشته شده باشه یا واسه خود اندروید باشه) و توی متد onCreate بنویسید
Lulzsec
سه شنبه 13 آبان 1393, 23:28 عصر
برای دستیابی به textview آکشن بار میتونید اول اون رو پیدا کنید و بعد فونت و هر خصوصیتی که خواستید رو تغییر بدید.
int titleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android"); if(titleId == 0)
titleId = com.actionbarsherlock.R.id.abs__action_bar_title;
حالا با id پیدا شده به این صورت عمل کنید(کد بالا هم برای پیدا کردن تایتل اکشن بار آندروید و هم اکشن بار شرلوک قابل استفاده است)
TextView mAppName = (TextView) findViewById(titleId); mAppName.setTypeface(Utils.getTypeface());
mAppName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
mAppName.setText(Utils.Reshape(mAppName.getText(). toString()));
mAppName.setShadowLayer(2, 1, 1, Color.parseColor("#000000"));
mAppName.setTextColor(Color.parseColor("#f4f5ef"));
سلام
آقا سعید برای من تو این خط کد اشکال میگیره:
mAppName.setTypeface(Utils.getTypeface());
میگه که:
Utils cannot be resolved
مشکلش از چیه؟
و یه سوال دیگه:
titleId = com.me.prog.R.id.abs__action_bar_title;
این قسمتی که قرمز کردم، ماله من نداره. در ضمن من از actionBar خوده android استفاده میکنم.(AppCompat)
Lulzsec
چهارشنبه 14 آبان 1393, 23:56 عصر
مشکلم حل شد فقط به خطی که توش Utils هست ایراد میگیره که من کامنتش کردم و کار هم میکنه کد.
یه سوال همین خط کدی که من کامنتش کردم چی کار میکنه؟
mAppName.setTypeface(Utils.getTypeface());
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.