Buongiorno, Buon Natale e Buon Anno,
Volevo proporvi oggi una guida carina carina su come centrare l'orologio nella vostra statusbar;
Perché un'altra?! Ve lo dirò; ma andiamo a capo [citazione famosa, 100$ chi la indovina]
Penso che questa sia una guida un po' più seria, non di certo perché la sto scrivendo io, in quanto l'originale è quella di Ticklefish al seguente indirizzo: [TUT] How To Center The Clock On The Statusbar..And Move Other Icons As Well!, ma perché seguendola non avrete quei fastidiosissimi problemi di sovrapposizione del testo, ad esempio quando arriva un messaggio, come fa ben notare l'autore della guida in questa immagine (overlap=sovrapposizione)
Ci sono due metodi uno più SEMPLICE e uno più complesso ma che definiremo il MIGLIORE
Perché scegliere il più complesso?
Guardate:
Metodo Semplice
Metodo Migliore
Metodo Semplice
- Decompiliamo il SystemUI.apk della nostra ROM DEODEXED(!!!)
- Apriamo il file /res/layout/tw_status_bar.xml
- Ignoriamo le prime e le ultime righe e prendiamo in considerazione queste:
codice:
<LinearLayout android:orientation="horizontal" android:id="@id/icons" android:paddingLeft="0.0dip" android:paddingRight="2.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent">
……[fino a]
<com.android.systemui.statusbar.policy.Clock android:textSize="@dimen/status_bar_clock_text_size" android:textColor="#ff959595" android:ellipsize="none" android:gravity="left|center" android:id="@id/clock" android:paddingLeft="3.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" android:includeFontPadding="false" />
</LinearLayout>
</LinearLayout>
Cosa ci interessa??
Beh, se conosciamo un pochino di inglese possiamo immaginare che la riga da spostare sia quella del "Clock" (=orologio);
codice:
<com.android.systemui.statusbar.policy.Clock android:textSize="@dimen/status_bar_clock_text_size" android:textColor="#ff959595" android:ellipsize="none" android:gravity="left|center" android:id="@id/clock" android:paddingLeft="3.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" android:includeFontPadding="false" />
prima rimuoviamo la parte "left|" poi spostiamo la riga da li e la mettiamo sotto la riga
codice:
<ImageView android:id="@id/notification_lights_out" android:paddingLeft="6.0dip" android:paddingBottom="2.0dip" android:visibility="gone" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="fill_parent" android:src="@drawable/ic_sysbar_lights_out_dot_small" android:scaleType="center" />
che è la prima che abbiamo ignorato e che non modificheremo.
Così il vostro orologio sarà al centro della statusbar, già finito?!
No, perché, come già detto, questa è una guida seria e per fare una bella cosa come quella del primo screenshot abbiamo bisogno di un altra riga:
codice:
<LinearLayout android:background="@drawable/status_bar_background" android:orientation="horizontal" android:id="@id/ticker" android:paddingLeft="6.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent" android:animationCache="false">
A che serve?
Semplicemente (beh, circa) questa riga dice alla status bar di "coprire l'orologio" all'arrivo di una notifica così da non sovrapporre il testo (ad esempio di un messaggio) con quello dell'ora
Dove la mettiamo?
La prima l'abbiamo messa in cima, allora questa in fondo
Al fine di avere qualcosa del tipo..
codice:
<com.android.systemui.statusbar.policy.Clock android:textSize="@dimen/status_bar_clock_text_size" android:textColor="#ff959595" android:ellipsize="none" android:gravity="center" android:id="@id/clock" android:paddingLeft="3.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" android:includeFontPadding="false" />
<LinearLayout android:orientation="horizontal" android:id="@id/icons" android:paddingLeft="0.0dip" android:paddingRight="2.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:orientation="horizontal" android:id="@id/left_icons" android:paddingLeft="4.0dip" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="1.0">
<TextView android:textSize="15.0dip" android:gravity="center_vertical" android:id="@id/carrierLabel" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" />
<ImageView android:id="@id/operatorLogoIcon" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="fill_parent" android:src="@drawable/tw_stat_notify_operator_logo" />
<ImageView android:id="@id/doNotDisturbIcon" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/tw_dnd" android:alpha="0.7" android:scaleX="0.85" android:scaleY="0.85" />
<com.android.systemui.statusbar.StatusBarIconView android:id="@id/moreIcon" android:visibility="gone" android:layout_width="@dimen/status_bar_icon_size" android:layout_height="fill_parent" android:src="@drawable/stat_notify_more" />
<com.android.systemui.statusbar.phone.IconMerger android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/notificationIcons" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" />
</LinearLayout>
<LinearLayout android:orientation="horizontal" android:id="@id/right_icons" android:paddingRight="4.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentRight="true">
<LinearLayout android:gravity="center_vertical" android:orientation="horizontal" android:id="@id/statusIcons" android:layout_width="wrap_content" android:layout_height="fill_parent" />
<LinearLayout android:gravity="center" android:orientation="horizontal" android:id="@id/signal_battery_cluster" android:paddingLeft="2.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent">
<include android:id="@id/signal_cluster" android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/tw_signal_cluster_view" />
<TextView android:textSize="12.0dip" android:textColor="#ffa6a6a6" android:layout_gravity="center" android:id="@id/battery_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/status_bar_network_name_separator" />
<ImageView android:gravity="center" android:id="@id/battery" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout android:background="@drawable/status_bar_background" android:orientation="horizontal" android:id="@id/ticker" android:paddingLeft="6.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent" android:animationCache="false">
Fatto?!?
Sì, ricompiliamo e firmiamo l'apk, poi lo mettiamo in /system/app e…crash ovunque
Speriamo di no
(la guida continua al prossimo post)