diff --git a/README.md b/README.md
index 7b609dd..1d3660e 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ repositories {
```
```Gradle
dependencies {
- compile 'rebus:header-view:2.0.0-BETA-5'
+ compile 'rebus:header-view:2.0.0-BETA-6'
}
```
### How to use
@@ -170,6 +170,16 @@ ImageLoader.init(new ImageLoader.ImageLoaderInterface() {
});
```
+#### Use custom font with Calligraphy
+You can set a custom font with [Calligraphy](https://github.com/chrisjenx/Calligraphy) just add a CustomViewTypeface with HeaderView.class in CalligraphyConfig
+```Java
+CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
+ .setDefaultFontPath("Oswald-Stencbab.ttf")
+ .setFontAttrId(R.attr.fontPath)
+ .addCustomViewWithSetTypeface(HeaderView.class)
+ .build()
+);
+```
### Screen
![Screen](https://raw.githubusercontent.com/rebus007/HeaderView/master/img/screen.png)
diff --git a/app/build.gradle b/app/build.gradle
index 08d89bc..060fd27 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -49,6 +49,6 @@ dependencies {
compile project(':library')
compile "com.android.support:appcompat-v7:${var.supportLib}"
compile "com.android.support:design:${var.supportLib}"
-
+ compile 'uk.co.chrisjenx:calligraphy:2.3.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
}
diff --git a/app/src/main/assets/Oswald-Stencbab.ttf b/app/src/main/assets/Oswald-Stencbab.ttf
new file mode 100644
index 0000000..70acb24
Binary files /dev/null and b/app/src/main/assets/Oswald-Stencbab.ttf differ
diff --git a/app/src/main/java/rebus/header/view/sample/CustomApplication.java b/app/src/main/java/rebus/header/view/sample/CustomApplication.java
index ba14281..7c92a8a 100644
--- a/app/src/main/java/rebus/header/view/sample/CustomApplication.java
+++ b/app/src/main/java/rebus/header/view/sample/CustomApplication.java
@@ -30,7 +30,9 @@
import com.bumptech.glide.Glide;
+import rebus.header.view.HeaderView;
import rebus.header.view.ImageLoader;
+import uk.co.chrisjenx.calligraphy.CalligraphyConfig;
/**
* Created by raphaelbussa on 13/01/17.
@@ -65,6 +67,11 @@ public void loadImage(Uri url, ImageView imageView, @ImageLoader.Type int type)
}
});
-
+ CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
+ .setDefaultFontPath("Oswald-Stencbab.ttf")
+ .setFontAttrId(R.attr.fontPath)
+ .addCustomViewWithSetTypeface(HeaderView.class)
+ .build()
+ );
}
}
diff --git a/app/src/main/java/rebus/header/view/sample/MainActivity.java b/app/src/main/java/rebus/header/view/sample/MainActivity.java
index 55bd0bd..b55b937 100644
--- a/app/src/main/java/rebus/header/view/sample/MainActivity.java
+++ b/app/src/main/java/rebus/header/view/sample/MainActivity.java
@@ -24,6 +24,7 @@
package rebus.header.view.sample;
+import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.content.ContextCompat;
@@ -40,6 +41,7 @@
import rebus.header.view.HeaderView;
import rebus.header.view.Item;
import rebus.header.view.Profile;
+import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;
public class MainActivity extends AppCompatActivity {
@@ -119,7 +121,7 @@ public void run() {
headerView.addProfile(profile, profile2, profile3, profile4);
headerView.addDialogItem(item, item2);
headerView.setShowAddButton(true);
- headerView.setAddIconDrawable(R.drawable.ic_action_settings);
+ //headerView.setAddIconDrawable(R.drawable.ic_action_settings);
headerView.setDialogTitle("Choose account");
headerView.setShowArrow(true);
headerView.setOnHeaderClickListener(new View.OnClickListener() {
@@ -174,4 +176,9 @@ public boolean onAdd() {
}
+ @Override
+ protected void attachBaseContext(Context newBase) {
+ super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
+ }
+
}
diff --git a/app/src/main/res/layout/header_drawer.xml b/app/src/main/res/layout/header_drawer.xml
index 797c01d..608075b 100644
--- a/app/src/main/res/layout/header_drawer.xml
+++ b/app/src/main/res/layout/header_drawer.xml
@@ -27,17 +27,20 @@
android:id="@+id/header_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- app:hv_add_icon="@drawable/ic_action_settings"
app:hv_add_status_bar_height="true"
app:hv_background_color="@color/colorPrimaryDark"
app:hv_dialog_title="@string/account"
app:hv_highlight_color="@color/colorAccent"
- app:hv_profile_avatar="@drawable/ic_avatar_batman"
- app:hv_profile_background="@drawable/ic_bg_batman"
- app:hv_profile_email="batman@gotham.city"
- app:hv_profile_username="Bruce Wayne"
app:hv_show_add_button="true"
app:hv_show_arrow="true"
app:hv_show_gradient="true"
app:hv_style="normal"
- app:hv_theme="light" />
\ No newline at end of file
+ app:hv_theme="light" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/drawer.xml b/app/src/main/res/menu/drawer.xml
index da81103..0ca57f2 100644
--- a/app/src/main/res/menu/drawer.xml
+++ b/app/src/main/res/menu/drawer.xml
@@ -25,58 +25,40 @@
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6de430d..47e3ee6 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
Header View
- Search
+ Settings
Account
diff --git a/build.gradle b/build.gradle
index a4bade7..667ae86 100644
--- a/build.gradle
+++ b/build.gradle
@@ -27,11 +27,11 @@ buildscript {
ext {
var = [
compileSdk: 25,
- buildTools: "25.0.2",
+ buildTools: "25.0.3",
minSdk : 11,
targetSdk : 25,
- version : "2.0.0-BETA-5",
- supportLib: "25.1.1"
+ version : "2.0.0-BETA-6",
+ supportLib: "25.3.1"
]
}
@@ -39,7 +39,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.2.3'
+ classpath 'com.android.tools.build:gradle:2.3.2'
classpath 'com.novoda:bintray-release:0.4.0'
}
}
diff --git a/library/src/main/java/rebus/header/view/HeaderView.java b/library/src/main/java/rebus/header/view/HeaderView.java
index 86aa1ac..b4e3b23 100644
--- a/library/src/main/java/rebus/header/view/HeaderView.java
+++ b/library/src/main/java/rebus/header/view/HeaderView.java
@@ -110,6 +110,8 @@ public class HeaderView extends ViewGroup implements ProfileChooserCallback {
private FragmentManager hvFragmentManager;
private ProfileChooser profileChooser;
+ private Typeface typeface;
+
public HeaderView(Context context) {
super(context);
init(null, 0);
@@ -626,9 +628,10 @@ public void onClick(View v) {
if (hvFragmentManager != null) {
ProfileChooserFragment profileChooserFragment = ProfileChooserFragment.newInstance(profileSparseArray, itemArrayList, hvHighlightColor, hvShowAddButton, hvDialogTitle, hvAddIconDrawable);
profileChooserFragment.setCallback(HeaderView.this);
+ profileChooserFragment.setTypeface(typeface);
profileChooserFragment.show(hvFragmentManager, ProfileChooserFragment.FRAGMENT_TAG);
} else {
- profileChooser = new ProfileChooser(getContext(), profileSparseArray, itemArrayList, hvHighlightColor, hvShowAddButton, hvDialogTitle, hvAddIconDrawable);
+ profileChooser = new ProfileChooser(getContext(), profileSparseArray, itemArrayList, hvHighlightColor, hvShowAddButton, hvDialogTitle, hvAddIconDrawable, typeface);
profileChooser.setCallback(HeaderView.this);
profileChooser.show();
}
@@ -809,6 +812,7 @@ protected void onRestoreInstanceState(Parcelable state) {
ProfileChooserFragment profileChooserFragment = (ProfileChooserFragment) hvFragmentManager.findFragmentByTag(ProfileChooserFragment.FRAGMENT_TAG);
if (profileChooserFragment != null) {
profileChooserFragment.setCallback(HeaderView.this);
+ profileChooserFragment.updateTypeface(typeface);
}
}
super.onRestoreInstanceState(state);
@@ -844,4 +848,12 @@ public boolean onAdd() {
public @interface Theme {
}
+ @SuppressWarnings("unused")
+ public void setTypeface(Typeface tf) {
+ typeface = tf;
+ username.setTypeface(tf);
+ email.setTypeface(tf);
+ invalidate();
+ }
+
}
diff --git a/library/src/main/java/rebus/header/view/ProfileChooser.java b/library/src/main/java/rebus/header/view/ProfileChooser.java
index 0cf579b..1357989 100644
--- a/library/src/main/java/rebus/header/view/ProfileChooser.java
+++ b/library/src/main/java/rebus/header/view/ProfileChooser.java
@@ -28,6 +28,7 @@
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
+import android.graphics.Typeface;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.View;
@@ -48,7 +49,7 @@ class ProfileChooser extends Dialog {
private ProfileChooserCallback callback;
@SuppressLint("RtlHardcoded")
- ProfileChooser(Context context, SparseArray profileSparseArray, ArrayList- items, int accent, boolean showAdd, String titleValue, int icon) {
+ ProfileChooser(Context context, SparseArray profileSparseArray, ArrayList
- items, int accent, boolean showAdd, String titleValue, int icon, Typeface tf) {
super(context);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.setContentView(R.layout.hw_account_chooser);
@@ -61,6 +62,7 @@ class ProfileChooser extends Dialog {
title.setTextColor(Utils.getTextColorPrimary(context));
title.setText(titleValue);
title.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT));
+ if (tf != null) title.setTypeface(tf);
add.setVisibility(showAdd ? View.VISIBLE : View.INVISIBLE);
add.setColorFilter(Utils.getTextColorPrimary(context));
add.setBackgroundResource(Utils.selectableItemBackgroundBorderless(context));
@@ -78,6 +80,7 @@ public void onClick(View v) {
Profile profile = profileSparseArray.valueAt(i);
if (profile.getId() != 1) {
RowProfileView profileView = new RowProfileView(context);
+ profileView.setTypeface(tf);
profileView.setProfile(profile, i == 0);
profileView.setAccent(accent);
profileView.setOnClickListener(new View.OnClickListener() {
@@ -99,6 +102,7 @@ public void onClick(View v) {
for (Item item : items) {
TextView textView = new TextView(context);
textView.setText(item.getTitle());
+ if (tf != null) textView.setTypeface(tf);
textView.setTag(item.getId());
textView.setBackgroundResource(Utils.selectableItemBackground(context));
textView.setPadding(padding, padding / 2, padding, padding / 2);
diff --git a/library/src/main/java/rebus/header/view/ProfileChooserFragment.java b/library/src/main/java/rebus/header/view/ProfileChooserFragment.java
index e27a719..77326a2 100644
--- a/library/src/main/java/rebus/header/view/ProfileChooserFragment.java
+++ b/library/src/main/java/rebus/header/view/ProfileChooserFragment.java
@@ -26,6 +26,7 @@
import android.annotation.SuppressLint;
import android.app.DialogFragment;
+import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.SparseArray;
@@ -54,6 +55,7 @@ public class ProfileChooserFragment extends DialogFragment {
private ImageView add;
private ProfileChooserCallback callback;
+ private Typeface typeface;
private boolean hvIsRTL;
public static ProfileChooserFragment newInstance(SparseArray profileSparseArray, ArrayList
- items, int accent, boolean showAdd, String titleValue, int icon) {
@@ -97,6 +99,7 @@ public void onViewCreated(View view, Bundle savedInstanceState) {
title.setTextColor(Utils.getTextColorPrimary(getActivity()));
title.setText(titleValue);
title.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT));
+ if (typeface != null) title.setTypeface(typeface);
add.setVisibility(showAdd ? View.VISIBLE : View.INVISIBLE);
add.setColorFilter(Utils.getTextColorPrimary(getActivity()));
add.setBackgroundResource(Utils.selectableItemBackgroundBorderless(getActivity()));
@@ -115,6 +118,7 @@ public void onClick(View v) {
Profile profile = profileSparseArray.valueAt(i);
if (profile.getId() != 1) {
RowProfileView profileView = new RowProfileView(getActivity());
+ profileView.setTypeface(typeface);
profileView.setProfile(profile, i == 0);
profileView.setAccent(accent);
profileView.setOnClickListener(new View.OnClickListener() {
@@ -138,6 +142,7 @@ public void onClick(View v) {
for (Item item : items) {
TextView textView = new TextView(getActivity());
textView.setText(item.getTitle());
+ if (typeface != null) textView.setTypeface(typeface);
textView.setTag(item.getId());
textView.setBackgroundResource(Utils.selectableItemBackground(getActivity()));
textView.setPadding(padding, padding / 2, padding, padding / 2);
@@ -163,4 +168,27 @@ public void setCallback(ProfileChooserCallback callback) {
this.callback = callback;
}
+ public void updateTypeface(Typeface tf) {
+ if (tf == null) return;
+ setTypeface(tf);
+ for (int i = 0; i < linearLayout.getChildCount(); i++) {
+ View view = linearLayout.getChildAt(i);
+ if (view instanceof RowProfileView) {
+ ((RowProfileView) view).setTypeface(typeface);
+ }
+ }
+ for (int i = 0; i < linearLayout1.getChildCount(); i++) {
+ View view = linearLayout1.getChildAt(i);
+ if (view instanceof TextView) {
+ ((TextView) view).setTypeface(typeface);
+ }
+ }
+ title.setTypeface(typeface);
+ }
+
+ public void setTypeface(Typeface tf) {
+ if (tf == null) return;
+ typeface = tf;
+ }
+
}
diff --git a/library/src/main/java/rebus/header/view/RowProfileView.java b/library/src/main/java/rebus/header/view/RowProfileView.java
index eec2a8b..5248fcc 100644
--- a/library/src/main/java/rebus/header/view/RowProfileView.java
+++ b/library/src/main/java/rebus/header/view/RowProfileView.java
@@ -63,6 +63,8 @@ class RowProfileView extends ViewGroup {
private int accent = Color.BLACK;
+ private Typeface typeface;
+
public RowProfileView(Context context) {
super(context);
init();
@@ -108,8 +110,13 @@ public void setProfile(Profile profile, boolean active) {
avatar.setPadding(hvRowAvatarBorderDimen, hvRowAvatarBorderDimen, hvRowAvatarBorderDimen, hvRowAvatarBorderDimen);
}
check.setVisibility(hvActive ? VISIBLE : INVISIBLE);
- username.setTypeface(active ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
- email.setTypeface(active ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
+ if (typeface != null) {
+ username.setTypeface(typeface);
+ email.setTypeface(typeface);
+ } else {
+ username.setTypeface(active ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
+ email.setTypeface(active ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
+ }
username.setText(hvProfile.getUsername());
email.setText(hvProfile.getEmail());
if (hvProfile.getAvatarRes() != 0)
@@ -201,4 +208,11 @@ protected void onLayout(boolean changed, int l, int t, int r, int b) {
}
}
+ public void setTypeface(Typeface tf) {
+ if (tf == null) return;
+ typeface = tf;
+ username.setTypeface(tf);
+ email.setTypeface(tf);
+ }
+
}