[GUIDE] Tạo thanh thanh thông báo 2 dòng – Status bar FlymeOS

[​IMG]

Chúng ta sẽ có 2 phần để tạo thanh thông báo 2 dòng.
– Mở rộng thanh thông báo.
– Chia thanh thông báo thành 2 dòng.

LƯU Ý: bạn cần có sự kiên nhẩn, vì làm cái này rất dễ sai và lỗi. nếu có lỗi thì do máy tính bạn chưa update java, hoặc do apk bị lỗi, nếu cảm thấy bạn đã đúng k sai mà file apk vẩn k đóng gói được thì bạn nên úp rom khác và làm.

dù làm đúng hay sai thì máy vẩn có khả năng bị treo hoặc mất thanh thông báo, nên bạn hãy sao chép SystemUI.apk Framework-res.apk các file mod bạn đã làm từ trước và giữ liệu cần thiết ra thẻ nhớ, tốt nhất là đem 1 rom zíp vào máy và cài rec, để khi treo máy thì có thể mở lại.
Cảnh báo là có thể treo, mình k chịu trách nhiệm nhé. nếu bạn k chuẩn bị đủ thì k nên làm.

  • Các phần mềm cần thiết :
  1. Apk Tool : http://www.mediafire.com/download/xcxocw8de9uk1d1/apktool.zip
  2. Notepad ++ : http://www.mediafire.com/download/imqmfapjnyxkrie/npp.6.6.9.Installer.exe
  3. Java : http://www.mediafire.com/download/509lu1lj3n9bjtg/Java.exe

Lưu ý: đối với bạn nào lần đầu tiên làm thì nên chú ý:

Các bạn cần vào máy lấy 3 file apk đó là: LGsystemUI.apk, lge-res.apk, framewokr-res.apk.

SystemUI nó có nhiều tên khác nhau trong máy của bạn, ví dụ như: LGsystemUI.apk, SystemUI.apk,….
Từ android 4.3 trở xuống bạn vào System->app để lấy SystemUI.apk
Từ android 4.4 trở lên bạn vào System->priv-app để lấy SystemUI.apk

Cái lge-res.apk nó là file apk ở trong system->framework
ở trong framework có 2 file -res.apk ngoài framework-res.apk thì cái còn lại chính là lge-res.apk, với lg thì nó là lge-res.apk, còn máy samsung là twframework-res.apk,…
nếu là máy khác thì bạn xem trong framework ngoài cái framework-res.apk thì cái nào có -res.apk nửa nó chính là lge-res.apk.

————————————————–
– Mở rộng thanh thông báo:
Xem video decopile(mở) framework-res.apk ( chỉ mở framework-res.apk thôi nhé chứ chưa có đóng gói, khi nào bạn làm xong hãy đóng gói framework-res.apk lại).

khi đã mở dc framework-res.apk thì bạn vào:

c:\apktool\framework-res\res\values\dimens.xml

mở cái dimens.xml bằng cách nhắn chuột phải vào nó chọn notepad++ mà bạn tải bên trên để mở nó ra. tìm dòng: <dimen name=”status_bar_height”> sau đó chỉnh nó thành như bên dưới:
<dimen name=”status_bar_height”>50.0dip</dimen>

sau khi làm xong thì bạn xem video bên trên để đóng gói nó nhé.

————————————————–

– Chia thanh thông báo thành 2 dòng.
Xem video decopile(mở) LGSystemUI.apk ( chỉ mở LGSystemUI.apk thôi nhé chứ chưa có đóng gói, khi nào bạn làm xong hãy đóng gói LGSystemUI.apk lại).

Bạn vào c:\apktool\LGSystemUI\res\values\ids.xml
thêm 3 dòng này vào cuối cùng nhu trong ảnh:

Mã:
    <item type="id" name="stt3phai">false</item>
    <item type="id" name="stt3phai1">false</item>
    <item type="id" name="stt3phai2">false</item>

[​IMG]

vào tiếp c:\apktool\LGSystemUI\res\layout\ rồi mở gemini_status_bar.xml lên (tùy máy mà có file này thì mở status_bar.xml), chỉnh sửa như sau:

đầu tiên bạn tạo 1 chiều cao 50.0 dip:

Mã:
LinearLayout android:gravity="right" android:orientation="vertical" android:id="@id/stt3phai" android:layout_width="fill_parent" android:layout_height="50.0dip" android:layout_weight="1.0">

bạn nhìn ảnh bên dưới mình làm, mình đã thụt vào 8 lần nhấn phím cách, bạn nhìn thấy bên trên là <com.lge.sys……
mà bên dưới mình thụt vô bằng 8 lần nhấn phím cách, nghĩa là cái dòng mà mình vừa thêm vô nó sẽ nằm trong lệnh <com.lge.sysy…..

[​IMG]

khi đã tạo 1 khoảng rộng 50.0dip thì bạn chia nó ra làm 2, nghĩa là bây giờ bạn tạo phần bên trên và tạo phần bên dưới:
tạo phần bên trên bằng cách thêm đoạn này vào như ảnh bên dưới:

Mã:
<LinearLayout android:gravity="right|center" android:orientation="horizontal" android:id="@id/stt3phai1" android:layout_width="fill_parent" android:layout_height="25.0dip" android:layout_weight="1.0">

( bạn thấy rằng mình đã thụt vô thêm 4 dấu cách nửa đúng k, thế nên cái chổ chia khoảng bên trên này nó là tập con nằm trong lệnh tạo 1 khoảng 50.0dip)
[​IMG]

Giờ khi bạn đã tạo phần bên trên thì bạn hãy đem sóng wifi hoặc các hiển thị thông báo lên nếu muốn nhé. khi bài này mình sẽ đem tất cả lên trên không để các icon nào ở phần bên dưới hết. ( xem ảnh bên dưới )
giờ bạn đi tìm các đoạn code chứa icon sóng thông báo pin: bạn chỉ cần cắt đoạn code pin sóng và duy chuyển nó nó thôi, cái này không khó nhưng rất dễ lầm lẩn và nó sẽ không đóng gói được.

bạn nhìn thấy từ dòng 10 đến dòng 17 không, nó là lệnh thông báo các icon rùi tin nhắn cuộc gọi,…
bạn thấy trong đoạn này có từ notification_icon_area không, nó là đoạn lệnh thông báo,
nhưng bạn có thấy dòng 11 12 nó không liên quan gì đến cái thông báo hết, bạn thấy nó nằm cùng hàng dọc, chứ không có cách vô, nghĩa là 2 lệnh này biểu tượng cho 2 cái khác nhau, dòng 11 12 chính là lệnh sóng sang trái mà máy mình cài sẳn một số máy không dùng rom cook sẽ không có lệnh 11 12 này,
điều bạn quan tâm bây giờ là đoạn 13 đến 16, nghĩa là đem cái thông báo lên bên trên,
khi bạn tạo 1 dòng code nào đó ví dụ như dòng 13 thì khi kết thúc bạn phải dùng lệnh </LinearLayout> và lệnh này phải cùng hàng dọc với cái <LinearLayout ở dòng 13, hiểu đơn giản là dòng 13 nó bắt đầu và dòng 16 là lệnh kết thúc của dòng 13
bạn thắc mắc tải sao dòng 11 12 không có lệnh kết thúc như dòng 16, vì trong dòng 11 và dòng 12 không có tập con nằm trong nó, nên nó không cần lệnh kết thúc như dòng 13 đến dòng 16.

khi đả đưa cái thông báo lên trên thì đóng gói </LinearLayout> ở dòng 17, vì dòng 10 mở đầu nên 17 sẽ đóng lại.
[​IMG]

tiếp đến là dòng 18 đến 29, nó là các icon sóng pin , đem tìm trong máy bạn xong đó bạn Cắt đoạn đó nhớ là chổ nào có lệnh <LinearLayout bắt đầu ở dòng 18 thì kết thúc nó có </LinearLayout> ở dòng 29 , vì máy mình trong cài đặt nó có thêm tùy chọn sóng wifi sang trái hoặc phải, nên nó sẽ có đến 2 lệnh icon sóng, lúc nảy mình đã làm 1 cái rùi, giờ mình đem thêm cái này lên nửa.

[​IMG]

bạn tạo 1 dòng màu xanh ngăn nửa trên và nửa dưới, bạn k thêm đoạn này củng k, k sao, lưu ý nhé, dòng code bạn tạo này phải nằm trong lệnh code ở dòng số 8, nghĩa là dòng 31 là tập con của dòng 8.
Dòng số 32 là stt3phai2:

Mã:
<LinearLayout android:gravity="right" android:orientation="horizontal" android:id="@id/stt3phai2" android:layout_width="fill_parent" android:layout_height="25.0dip" android:layout_weight="1.0">

bạn thấy dòng 32 nó có stt3phai2 , bạn nhìn dòng số 9 sẽ thấy stt3phai1, bạn có thể là, stt3phai2 là vòng tròn B và stt3phai1 là vòng tròn A, lúc nảy mình mình đã đem hết các thứ lên vòng tròn A ở dòng 9 rùi nên sẽ không có gì để đưa vào vòng B này hết, nếu bạn không đưa các dòng code vào vòng A bạn có thể đưa nó qua B đề chuyển các code này lên trên và nằm bên phải .
còn nếu nó không chưa tập con nào, nghĩa là sẽ không có lệnh đóng dòng..
dòng số 33 là dòng đóng lệnh code lại, và là chổ kết thúc của dòng số 8
bạn nhìn thấy dòng số 34 có tên là:

Mã:
</com.lge.systemui.StatusBarLinearLayout>

nó là lệnh đóng dòng số 7, vì nảy giờ mình làm là dòng số 8 nó thụt vô 8 dấu cách so với dòng số 7, nghĩa là nó là tập con của dòng số 7.
bạn thắc mắc sao k dùng lệnh </LinearLayout> ở dòng 34, vì ở dòng số 7 nó là <com.lge.sys… chứ k phải <LinearLayout> chú ý chổ này nhé.
[​IMG]

như vậy bạn đã làm xong, giờ bạn save nó lại và đóng gói là xong
nó không khó nhưng dễ bị chuyển dòng sai, hay kiên nhẩn làm nhé, mình đã sai nhiều lần để làm dc cái này..

đây là 1 đoạn mà mình sửa, k nền coppy tất cả vào máy của bạn, sẽ bị lỗi, chỉ tham khảo thôi

Mã:
  xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui">
    <include android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/crayonsinchan" />
    <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" />
    <com.lge.systemui.StatusBarLinearLayout android:orientation="horizontal" android:id="@id/icons" android:tag="NO_R2L" android:paddingLeft="6.0dip" android:paddingRight="6.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent">
        <LinearLayout android:gravity="right" android:orientation="vertical" android:id="@id/stt3phai" android:layout_width="fill_parent" android:layout_height="50.0dip" android:layout_weight="1.0">
            <LinearLayout android:gravity="right|center" android:orientation="horizontal" android:id="@id/stt3phai1" android:layout_width="fill_parent" android:layout_height="25.0dip" android:layout_weight="1.0">
                <LinearLayout android:gravity="left" android:orientation="horizontal" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="1.0">
                    <include android:id="@id/signal_cluster2" android:layout_width="wrap_content" android:layout_height="fill_parent" layout="@layout/signal_cluster_view2" />
                    <com.lge.systemui.OperatorTextView android:textStyle="bold" android:gravity="center_vertical" android:id="@id/operator_text" android:tag="NO_R2L" android:paddingLeft="2.0dip" android:paddingRight="2.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" />
                    <LinearLayout android:orientation="horizontal" android:id="@id/notification_icon_area" android:tag="NO_R2L" android:layout_width="0.0dip" android:layout_height="fill_parent" android:layout_weight="1.0">
                        <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:tag="NO_R2L" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" />
                    </LinearLayout>
                </LinearLayout>
                <LinearLayout android:gravity="right" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1.0">
                    <com.android.systemui.statusbar.NetworkSpeedView android:textAppearance="@style/TextAppearance.StatusBar.Speed" android:gravity="right|center" android:id="@id/network_speed_view" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginRight="2.0dip" android:singleLine="true" />
                    <LinearLayout android:orientation="horizontal" android:id="@id/statusIcons" android:layout_width="wrap_content" android:layout_height="fill_parent" />
                    <LinearLayout android:orientation="horizontal" android:id="@id/signal_battery_cluster" android:tag="NO_R2L" android:layout_width="wrap_content" android:layout_height="fill_parent">
                        <com.lge.systemui.VoLteImageView android:id="@id/skt_kt_volte_normal" android:paddingLeft="3.0dip" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="wrap_content" />
                        <include android:id="@id/signal_cluster" android:layout_width="wrap_content" android:layout_height="fill_parent" layout="@layout/signal_cluster_view" />
                        <com.lge.systemui.VoLteImageView android:id="@id/lgu_volte_normal" android:paddingLeft="3.0dip" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="wrap_content" />
                        <TextView android:textSize="13.0dip" android:textColor="#f2f2f2f2" android:gravity="center_vertical" android:id="@id/level_percent" android:tag="NO_R2L" android:paddingLeft="2.0dip" android:paddingRight="1.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" />
                        <ImageView android:id="@id/battery" android:paddingRight="1.0dip" android:layout_width="fill_parent" android:layout_height="wrap_content" />
                    </LinearLayout>
                    <com.android.systemui.statusbar.policy.Clock android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:gravity="center_vertical" android:id="@id/clock" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" />
                </LinearLayout>
            </LinearLayout>
            <View android:gravity="right" android:background="@drawable/abc" android:layout_width="fill_parent" android:layout_height="1.0dip" android:maxWidth="150.0dip" />
            <LinearLayout android:gravity="right" android:orientation="horizontal" android:id="@id/stt3phai2" android:layout_width="fill_parent" android:layout_height="25.0dip" android:layout_weight="1.0" />
        </LinearLayout>
    </com.lge.systemui.StatusBarLinearLayout>

khi chia thành thông rồi, các bạn cần tạo ảnh nền cho thanh thông báo, nếu máy có sẳn thì không cần tạo nhé, ảnh nền này sẽ nằ trong mục chứa icon pin sóng , nó có tên là: stat_sys_indi_bg.png nếu k có thì bạn tạo bằng cách:
http://sccn.vn/threads/thay-doi-nen-thanh-thong-bao-trang-thai.4050/

khi tạo xong rồi thì bạn chọn hình nền thanh thông báo như cái hình ở đầu bài nhé:
http://sccn.vn/threads/icon-pin-song-up-date-lien-tuc-by-pham-den.3758/

nếu khung ảnh k vừa với máy bạn thì bạn dùng cái này để chỉnh cho đẹp nhé:
http://sccn.vn/threads/tao-va-chinh-sua-icon-png-d.4063/

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s