1

How can we set title text padding without making custom ActionBar?

Here is good answer about ActionBar`s logo padding in xml: Padding between ActionBar's home icon and title

So I want to do something like this for title.

Here is my styles.xml code:

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:background">@android:color/transparent</item>
    <item name="android:actionBarSize">80dp</item>
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

<style name="MyActionBar" parent="android:Widget.Holo.ActionBar" >
    <item name="android:logo">@drawable/action_bar_logo_padding</item>
    <item name="android:background">@drawable/action_bar</item>
    <item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
</style>

<style name="MyActionBarTitleText"
       parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">@color/green</item>
    <item name="android:paddingTop">25dp</item>
    <item name="android:textSize">30sp</item>
</style>

android:paddingTop not working (same goes for android:top and android:topOffset)

Community
  • 1
  • 1
code_gen
  • 23
  • 1
  • 4
  • did you try layout_marginTop and if not paddingTop on the actionbar rather than the text style? – MiltoxBeyond Nov 11 '14 at 15:55
  • paddingTop and layout_marginTop on the actionbar just move whole actionbar with all of it`s elements (border included) down the activity. layout_marginTop in text style not working too. – code_gen Nov 11 '14 at 16:12

2 Answers2

1

You problem will not resolve so easy with Styles... The best solution is create a CustomView to you actionBar and use it! Sometimes styles padding in actionbar(title) doesn't work on some devices.

Example: -> http://javatechig.com/android/actionbar-with-custom-view-example-in-android

Good Luck!

Thiago Souto
  • 761
  • 5
  • 13
1

The reason I didn`t want to create custom actionBar is that actionBar in my application contain only basic things like logo and title. Plus I already found how to control logo. But in the end, as Souto suggested, I created my own custom view:

java code (public class with static method):

import android.app.ActionBar;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

public class MyActionBar {
    static void CreateActionBar(ActionBar ab, Activity ac, String str) {
        ab.setDisplayShowHomeEnabled(false);
        ab.setDisplayShowTitleEnabled(false);
        LayoutInflater mInflater = LayoutInflater.from(ac);

        View mCustomView = mInflater.inflate(R.layout.action_bar, null);
        TextView mTitleTextView = (TextView) mCustomView.findViewById(R.id.title_text);
        mTitleTextView.setText(str);

        ab.setCustomView(mCustomView);
        ab.setBackgroundDrawable(ac.getResources().getDrawable(R.drawable.action_bar));
        ab.setDisplayShowCustomEnabled(true);
    }
}

action_bar.xml relative layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:background="@android:color/transparent" >

<ImageView
    android:id="@+id/image"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="8dp"
    android:layout_marginLeft="8dp"
    android:src="@drawable/logo" />

<TextView
    android:id="@+id/title_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@id/image"
    android:layout_marginLeft="10dp"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="9dp"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="@color/green"
    android:textStyle="normal"
    android:fontFamily="sans-serif-light"
    android:textSize="34sp" />
</RelativeLayout>

styles.xml:

<style name="AppTheme" parent="AppBaseTheme">
        <item name="android:background">@android:color/transparent</item>
        <item name="android:actionBarSize">80dp</item>
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

    <style name="MyActionBar" parent="android:Widget.Holo.ActionBar" > 
        <item name="android:displayOptions"></item>
        <item name="android:background">@drawable/action_bar</item>
    </style>

and in each activity:

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ActionBar mActionBar = getActionBar();
    MyActionBar.CreateActionBar(mActionBar, this, "My title");

    ......................................
code_gen
  • 23
  • 1
  • 4