2010-04-19 54 views
15

Vì vậy, tôi đang sử dụng các kỹ thuật trong this thread để sử dụng nền tùy chỉnh cho thanh tiêu đề của tôi. Thật không may khuôn khổ bố trí của tôi bên trong một FrameLayout (title_container) có đệm như được thấy bên dưới.Thanh tiêu đề tùy chỉnh mà không cần đệm (Android)

alt text http://lh3.ggpht.com/_KP55v0Zt2pk/S80CUbrYkCI/AAAAAAAAARY/FJ_WPt8ah2s/s800/title_bar.png

Có cách nào để xóa đường viền màu xám không? Bố cục khung được định nghĩa trong com.android.internal.R.id.title_container, do đó việc truy cập khung theo ID sẽ dễ vỡ.

Trả lời

16

Tôi đã đấu tranh với cùng một vấn đề này và bây giờ tôi có câu trả lời!

Như bạn có thể đã thấy một số nơi, bạn cần phải tạo ra một nguồn lực themes.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="MyTheme" parent="android:Theme"> 
      <item name="android:windowTitleSize">44dip</item> 
      <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item> 
    </style> 
</resources> 

Lưu ý nó không thường được đề cập trong trang web nói về thanh tiêu đề tùy chỉnh, bạn cần chọn chủ đề này cấp độ xem, hoạt động hoặc ứng dụng. Tôi làm điều đó ở cấp ứng dụng bằng cách thêm thuộc tính android: theme vào ứng dụng:

<application android:icon="@drawable/icon" 
       android:label="@string/app_name" 
       android:theme="@style/MyTheme"> 

Bạn cũng cần tệp styles.xml để xác định WindowTitleBackgroundStyle. Không giống như các phiên bản khác nhau của tập tin này tôi đã thấy nổi aroung web, tôi đã thêm một dòng bổ sung vào tập tin mà bộ padding 0 mà được thoát khỏi những đệm bạn đang phàn nàn về:

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <style name="WindowTitleBackground"> 
     <item name="android:background">@android:color/transparent</item> 
     <item name="android:padding">0px</item> 
    </style> 
</resources> 
+0

cảm ơn bạn, điều này đã giúp ích rất nhiều. –

+0

setPadding trên ViewGroup đã không làm điều đó cho tôi. Đề nghị của bạn để thiết lập một nền với 0 padding đã làm nó. – AlanKley

+0

Cảm ơn rất nhiều, điều này đã làm việc hoàn hảo. –

1

Có một sợi lenghty qua trên anddev.org rằng có thể giúp bạn ra ngoài

http://www.anddev.org/my_own_titlebar_backbutton_like_on_the_iphone-t4591.html

Tôi đã theo nó và tạo thành công thanh tiêu đề của riêng tôi cho phép tôi để thiết lập padding.

Xml cho thanh tiêu đề của tôi:


<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout android:id="@+id/header" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="38px" android:layout_width="fill_parent" 
android:background="@drawable/gradient"> 

<TextView android:id="@+id/title" android:layout_width="wrap_content" 
android:gravity="center_vertical" style="@style/PhoneText" 
android:layout_alignParentLeft="true" 
android:text="New Title" android:background="@android:color/transparent" 
android:layout_height="wrap_content" android:layout_alignParentTop="true" 
android:padding="5dip" android:layout_marginBottom="7px"/> 

<TextView android:id="@+id/time" android:layout_width="wrap_content" 
android:gravity="center_vertical" style="@style/PhoneText2" 
android:layout_alignParentRight="true" 
android:text="Test Text" android:background="@android:color/transparent" 
android:layout_height="wrap_content" android:layout_alignParentTop="true" 
android:padding="4dip" android:layout_marginBottom="7px"/> 
</RelativeLayout> 

Trên đây tạo ra một thanh nhỏ màu xám với các văn bản liên kết ở bên phải và bên trái

+0

Điều đó thực sự không hiệu quả đối với tôi. Tôi đang cố gắng để loại bỏ các padding, không thêm padding bổ sung – Casebash

7

Có thực sự là không có nhu cầu sử dụng bố cục tùy chỉnh để tùy chỉnh hình nền. Các mã sau đây trong theme.xml sẽ làm việc:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="TitlebarBackgroundStyle"> 
     <item name="android:background">@drawable/header_bg</item> 
    </style> 
    <style name="Theme.OTPMain" parent="android:Theme"> 
     <item name="android:windowTitleBackgroundStyle">@style/TitlebarBackgroundStyle</item> 
    </style> 
</resources> 

Tuy nhiên, nếu bạn thực sự muốn sử dụng một thanh tiêu đề tùy chỉnh, sau đó đoạn mã sau sẽ loại bỏ các margin:

ViewGroup v = (ViewGroup) findViewById(android.R.id.title); 
v.setPadding(0, 0, 0, 0) 

title_bar_background được thiết lập như là ID của hình nền trong XML. Tôi đặt android:scaleType="fitXY".

+0

nó dường như không hoạt động trên Android 4. bạn có bất kỳ ý tưởng tại sao điều này sẽ được? tôi đang sử dụng android: Theme.Holo.Light là cha mẹ – nLL

1

tôi thoát khỏi padding bằng cách lấy container tiêu đề và thiết lập padding là 0. Nó hoạt động trên Android 4.

titleContainerId = (Integer)Class.forName("com.android.internal.R$id").getField("title_container").get(null); 

ViewGroup vg = ((ViewGroup) getWindow().findViewById(titleContainerId)); 
vg.setPadding(0, 0, 0, 0); 
1

Như đã đề cập bởi dalewking, bạn có thể thay đổi Manifest như thế này:

<application android:icon="@drawable/icon" 
      android:label="@string/app_name" 
      android:theme="@style/MyTheme"> 

Nhưng nó không làm việc cho tôi cho đến khi tôi thêm

android:theme="@style/MyTheme" 

đến hoạt động nó tự như :

<activity 
     android:name=".MainActivity" 
     android:screenOrientation="portrait" 
     android:theme="@style/CustomTheme" >    
    </activity> 
0

Kể từ 4.2 và ADT 21 khi tạo một bố cục mặc định kích thước tiêu chuẩn được bổ sung vào thùng phụ huynh:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

</RelativeLayout> 

Giá trị được đặt tại res/dimens.xml:

<!-- Default screen margins, per the Android Design guidelines. --> 
<dimen name="activity_horizontal_margin">16dp</dimen> 
<dimen name="activity_vertical_margin">16dp</dimen> 

</resources> 

Hoặc loại bỏ chúng khỏi cha mẹ hoặc thay đổi giá trị dimens.xml thành giá trị mong muốn của bạn.

0

tôi đã thêm mục đệm sau AppTheme trong styles.xml

<style name="AppTheme" parent="AppBaseTheme"> 
... 
<item name="android:padding">0dp</item> 
... 
</style> 

Lược khai ứng dụng sử dụng chủ đề đó:

<application 
... 
android:theme="@style/AppTheme" > 
... 

này giải quyết nó cho tôi.

Các vấn đề liên quan