Как сделать белый фон на на андроид


Как сделать белый фон на на андроид

Как сделать белый фон на на андроид

Как сделать белый фон на на андроид

Как сделать белый фон на на андроид

Всем привет. Практически все инструкции, выкладываемые нашими Уважаемыми участниками форума, сводятся к тому, что надо где то что то найти и заменить на то, что они предлагают, не объясняя саму суть процесса. В этом опусе, я по возможности попытаюсь подробно расписать, что, где и зачем надо менять, чтоб привести под свой вкус оформление звонилки, на примере Android 4.2.2 AOSP
Описание интерфейса звонилки находится в Phone.apk:
res\layout\primary_call_info.xml - верхняя часть (фото, имя, номер, сим, страна итд)
res\layout\ incall_touch_ui.xml - нижняя часть ("кольца" входящего, кнопки итд)
res\values\styles.xml - стили элементов
smali\com\android\phone\CallCard.smali - (фон под "кольцами" входящего)

Любой элемент, находящийся на экране имеет свой id. Элементы начинают располагаться в описанном порядке (с первого и в низ).
Элементы могут располагаться следующим образом:
View - разметка для отображения одного элемента.

FrameLayout - удобно использовать для нескольких элементов, которые скрываются и показываются программно, таким образом, в каждый момент времени видимым оказывается только один из них. Для управления видимостью элемента используется атрибут android:visibility который принимает одно из трех значений:
Visible - элемент видим
Invisible - элемент невидим, но все еще занимает место в разметке
Gone - элемент невидим и не занимает место в разметке

LinearLayout - разметка для отображения одного или нескольких элементов в одну линию, горизонтально или вертикально. Для выбора ориентации используется атрибут android:orientation с двумя возможными значениями:
Horizontal - горизонтально
Vertical – вертикально

TableLayout - разметка для расположения элементов в виде таблицы. Ряды задаются с помощью тега TableRow, а ячейки в каждом ряду создаются автоматически для каждого элемента. Количество колонок в таблице будет равно максимальному количеству элементов в рядах. То есть если в одном ряду 3 элемента, а во втором 1, то колонок в TableLayout будет 3. Ширина колонки определяется по самому широкому элементу в ней. Ячейки таблицы можно оставлять пустыми, или объединять. Атрибут android:layout_column — задает в какой столбец поместить данный элемент (нумерация столбцов начинается с 0). Атрибут android:layout_span — позволяет объединить указанное количество столбцов (ряды объединить нельзя)

RelativeLayout - разметка для расположения элементов относительно родителя или друг друга. Элементы начинают располагаться в указанном порядке, поэтому необходимо, чтобы элемент был описан до того, как другой элемент будет на него ссылаться.
Возможные атрибуты элементов:
Расположение относительно родительского элемента:
android:layout_alignParentTop - верхняя граница элемента располагается на верхней границе RelativeLayout
android:layout_alignParentLeft - левая граница элемента располагается на левой границе RelativeLayout
android:layout_alignParentRight - правая граница элемента располагается на правой границе RelativeLayout
android:layout_alignParentBottom - нижняя граница элемента располагается на нижней границе RelativeLayout
android:layout_centerInParent - элемент располагается в центре родительского по горизонтали и вертикали
android:layout_centerHorizontal - элемент располагается в центре родительского по горизонтали
android:layout_centerVertical - элемент располагается в центре родительского по вертикали
Значением атрибута является «true»
Расположение относительно других элементов, значением атрибута является id другого элемента:
android:layout_above - элемент располагается сверху от другого элемента
android:layout_toLeftOf - элемент располагается слева от другого элемента
android:layout_toRightOf - элемент располагается справа от другого элемента.
android:layout_below - элемент располагается снизу от другого элемента.
android:layout_alignBaseline - базовая линия элемента выравнивается по базовой линии другого элемента
android:layout_alignTop - верхняя граница элемента выравнивается по верхней границе другого элемента
android:layout_alignLeft - левая граница элемента выравнивается по левой границе другого элемента
android:layout_alignRight - правая граница элемента выравнивается по правой границе другого элемента
android:layout_alignBottom - нижняя граница элемента выравнивается по нижней границе другого элемента

Во всех View есть атрибуты позволяющие управлять их размерами или расположением. Основные из них:
android:layout_width и android:layout_height
Ширина и высота элемента. Атрибут может принимать следующие значения:
fill_parent - элемент имеет размер такой же как и родительский элемент
wrap_content - элемент имеет размер по своему содержимому
точное значение размера в dip

android:layout_gravity
Атрибут определяющий как данный View позиционируется внутри родительского элемента.
android:gravity
Атрибут определяющий как данный View позиционируется внутри самого элемента
Основные значения: top, bottom, left, right, center. Значение у элемента может быть одно или несколько (тогда они разделяются «|»)

android:layout_margin
А также android:layout_marginLeft, android:layout_marginRight, android:layout_marginTop, android:layout_marginBottom. Атрибут определяет отступ элемента от соседних элементов (или от границы родительского). Для отступа внутри элемента используются атрибуты
android:padding, android:paddingLeft, android:paddingRight, android:paddingTop, android:paddingBottom

Так же элементы имеют атрибуты определяющие их цвет, размер, количество строк итд, более подробную информацию без труда можно найти на бескрайних просторах интернета.

Для того чтобы исключить показ элемента можно применить параметр android:visibility="gone" или выставить ему размер в 0.0dip а цвет изменить в цвет фона (понадобится если Вы захотите скрыть какие либо элементы, типа страны, оператора итд).

Все описанное выше относится только к Layouts (разметка) и Вы должны понимать, что изменяя атрибуты элементам, Вы можете менять только существующие, а вот добавлять новые, это уже другая история.

Ну приступим. Что имеем:

ANDROID--модернизация,улучшения и т.д. для смартфонов

1.jpg (123.4 КБ) Просмотров: 51156


Давайте в качестве примера изменим размер шрифта и положение в имени абонента, размер шрифта в номере телефона, окрасим в другой цвет идентификатор телефонного номера, уберем элемент отвечающий за вывод названия оператора возле имени абонента, страну, сменим цвет банера и шрифта на котором выводится информация о типе звонка, времени итд., сместим фото вниз, уберем черный фон под кнопкой "отбой" при исходящем, уберем черный фон под "кольцами" при входящем.

Редактируем res\layout\primary_call_info.xml
1) Начнем с имени абонента. Ищем строки с @id/name отвечающие за вывод имени абонента:

Код: <TextView  android:textSize="@dimen/call_banner_text_size" android:textColor="@color/incall_call_banner_text_color" android:ellipsize="end" android:id="@id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxWidth="@dimen/call_card_name_number_max_name" android:maxLines="2" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" />

Разберем детально, что говорят все эти атрибуты:
android:textSize="@dimen/call_banner_text_size"
этот атрибут задает размер шрифта элемента, посмотреть каков он по умолчанию можно в файле res\values\dimens.xml
android:textColor="@color/incall_call_banner_text_color"
этот атрибут задает цвет шрифта элемента, посмотреть каков он по умолчанию можно в файле res\values\colors.xml
android:ellipsize="end"
этот атрибут задает параметр, чтобы в конце текста, если он не помещается целиком, добавлялось многоточие
android:id="@id/name"
этот атрибут задает какой элемент показывать (в нашем случае Инициалы абонента)
android:layout_width="wrap_content"
этот атрибут задает ширину элемента и имеет размер по своему содержимому
android:layout_height="wrap_content"
этот атрибут задает высоту элемента и имеет размер по своему содержимому
android:maxWidth="@dimen/call_card_name_number_max_name"
этот атрибут задает максимальную ширину элемента посмотреть какова она по умолчанию можно в файле res\values\dimens.xml
android:maxLines="2"
этот атрибут задает элементу параметр показа информации в две строки
android:layout_alignParentLeft="true"
этот атрибут задает что левая граница элемента располагается на левой границе
android:layout_alignParentTop="true"
этот атрибут задает что верхняя граница элемента располагается на верхней границе

Разобравшись что да как, переходим к редактированию атрибутов
а) Увеличим размер шрифта, по умолчанию он 17.0dip (видно из res\values\dimens.xml ) меняем на 30.0dip
P.S. Можно поиграться с стилем шрифта, добавив параметр android:textStyle. Основные значения: bold, italic. Значение у элемента может быть одно или несколько (тогда они разделяются «|»)
b) Меняем расположение текста, по умолчанию он выравнивается по левому краю, а мы хотим чтоб он выравнивался от центра, значит удаляем атрибут android:layout_alignParentLeft и добавляем свой android:gravity="center"
c) Показываем элемент по ширине на весь экран, меняя атрибут android:layout_width с wrap_content на fill_parent и удаляем атрибут android:maxWidth ограничивающий наш элемент по ширине.

На выходе у нас получится следующее:

Код: <TextView android:textSize="30.0dip" android:textColor="@color/incall_call_banner_text_color" android:gravity="center" android:id="@id/name" android:layout_width="fill_parent" android:layout_height=" wrap_content " android:maxLines="2" android:layout_alignParentTop="true" />

Но это еще не все, есть один нюанс.
Наш TextView находится внутри RelativeLayout который тоже имеет свои атрибуты:

Код: <RelativeLayout android:id="@id/primary_call_banner" android:background="@color/incall_call_banner_background" android:paddingLeft="@dimen/call_banner_side_padding" android:paddingTop="@dimen/call_banner_top_bottom_padding" android:paddingRight="@dimen/call_banner_side_padding" android:paddingBottom="@dimen/call_banner_top_bottom_padding" android:layout_width="fill_parent" android:layout_height="80.0dip" android:layout_alignParentTop="true" style="@style/PrimaryCallInfoPrimaryCallBanner">

А так как мы поменяли размер шрифта в нашем ТextView, значит нам нужно увеличить размер по высоте и в RelativeLayout, чтобы элементы не налазили друг на друга. По умолчанию он составляет android:layout_height="80.0dip"
Мы увеличили размер шрифта с 17.0dip на 30.0dip, разница в размере составит (30.0dip(новый размер)-17.0dip(размер по умолчанию)=13.0dip(разница), так вот эту разницу в 13.0dip Вам нужно будет добавить к размеру банера (80.0dip+13.0dip(разница первой строки)+13.0dip(разница второй строки)+по 2.0dip для каждой строки (для букв типа ц, щ, р с нижним хвостиком))=108.0dip, тогда параметр будет выглядеть таким образом android:layout_height="108.0dip"

2) Задав в ТextView новый параметр android:layout_width="fill_parent" (отображать элемент во всю ширину), строка с инициалами абонента налезет на другой элемент android:id="@id/operatorName"

Код: <TextView android:textSize="@dimen/call_banner_text_size" android:textColor="@color/incall_call_banner_text_color" android:ellipsize="middle" android:id="@id/operatorName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxWidth="100.0dip" android:singleLine="true" android:layout_alignParentTop="true" android:layout_alignParentRight="true" />
Есть два варианта решения.
a) Перенести этот элемент в другое место.
b) Скрыть его вообще, задав размер шрифта 0.0dip и изменив цвет элемента на цвет основного банера который описан в RelativeLayout, должно получится следующее:
Код: <TextView android:textSize="0.0dip" android:textColor="@color/incall_call_banner_background" android:ellipsize="middle" android:id="@id/operatorName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxWidth="100.0dip" android:singleLine="true" android:layout_alignParentTop="true" android:layout_alignParentRight="true" />

3) Теперь увеличим размер шрифта номера телефона. Ищем строки с @id/phoneNumber:

Код: <TextView android:textSize="@dimen/call_banner_text_size" android:textColor="@color/incall_call_banner_text_color" android:ellipsize="end" android:id="@id/phoneNumber" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxWidth="170.0dip" android:singleLine="true" />
a) Нам нужен параметр отвечающий за размер текста
android:textSize="@dimen/call_banner_text_size"
по умолчанию он 17.0dip (видно из res\values\dimens.xml ) меняем на 22.0dip
b) Так как мы увеличили размер шрифта, а параметр android:maxWidth="170.0dip" нам говорит, что элемент имеет ограничения по ширине, нам надо увеличить этот параметр до 190.0dip, чтобы номер не обрезался.
Должно получится следующее:
Код: <TextView android:textSize="22.0dip" android:textColor="@color/incall_call_banner_text_color" android:ellipsize="end" android:id="@id/phoneNumber" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxWidth="190.0dip" android:singleLine="true" />
!!! Опять же, не забываем про разницу размеров шрифтов, добавляя ее к размеру основного банера, чтобы элементы не наползали друг на друга !!!

4) Окрашиваем в другой цвет идентификатор телефонного номера (на зеленый). Ищем строки с id="@id/label":

Код: <TextView android:textSize="@dimen/call_banner_text_size" android:textColor="@color/incall_call_banner_text_color" android:ellipsize="end" android:id="@id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="6.0dip" android:maxWidth="170.0dip" android:singleLine="true" />
а) Меняем параметр android:textColor="@color/incall_call_banner_text_color" на android:textColor="#ff00ff00" (где ff определяет прозрачность, а 00FF00 сам цвет)
b) Можно поиграться с параметром android:layout_marginLeft="6.0dip", который говорит нам, что этот элемент будет находиться правее предыдущего на расстоянии в 6.0dip. Раз мы решили убрать элемент с страной, увеличим этот отступ до 30.0dip, для эстетики. Получится следующее:
Код: <TextView android:textSize="@dimen/call_banner_text_size" android:textColor="#ff00ff00" android:ellipsize="end" android:id="@id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30.0dip" android:maxWidth="170.0dip" android:singleLine="true" />
4) Убираем элемент с страной. Ищем строки с @id/phoneNumberGeoDescription, и поступаем так же как и с убранным элементом id="@id/operatorName" отвечающим за вывод имени оператора, задав размер шрифта 0.0dip и изменив цвет элемента на цвет основного банера который описан в RelativeLayout

5) Меняем цвет фона элемента с типом звонка, длительностью, сим-индикатором итд. с прозрачного по умолчанию, на серый.
a)Ищем строку с id="@id/callStateAndSimIndicate", и меняем параметр android:background="@android:color/transparent" на android:background="#ff818181"
b) Так как мы изменили цвет фона элемента, то нам нужно будет изменить и цвет шрифта выводимой информации. Меняем все строки в этом элементе отвечающие за цвет шрифта с android:textColor="@color/incall_call_banner_text_color" на android:textColor="#ff000000"(с белого по умолчанию, на черный). Получаем следующее:

Код: <RelativeLayout android:orientation="horizontal" android:id="@id/callStateAndSimIndicate" android:background="#ff818181" android:paddingLeft="@dimen/call_banner_side_padding" android:paddingRight="@dimen/call_banner_side_padding" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:textSize="@dimen/call_banner_call_state_label_text_size" android:textColor="#ff000000" android:ellipsize="end" android:gravity="left" android:id="@id/callStateLabel" android:background="@android:color/transparent" android:layout_width="wrap_content" android:layout_height="@dimen/call_state_label_height" android:singleLine="true" android:layout_alignParentLeft="true" android:textAllCaps="true" />
<TextView android:textSize="@dimen/call_banner_small_text_size" android:textColor="#ff000000" android:ellipsize="middle" android:id="@id/simIndicator" android:background="@drawable/sim_light_blue" android:layout_width="wrap_content" android:layout_height="@dimen/call_sim_indicator_height" android:maxWidth="100.0dip" android:singleLine="true" android:layout_alignParentRight="true" android:layout_centerVertical="true" />
</RelativeLayout>
6) Если Вам не нравится, что фото абонента на весь экран, и просвечивается под информацией об абоненте, номере и тд., есть два решения:
Способ 1) Ищем строку с id="@id/primary_call_banner", смотрим какой размер по высоте у банера на которой выводится вся эта информация:
Код: <RelativeLayout android:id="@id/primary_call_banner" android:background="@color/incall_call_banner_background" android:paddingLeft="@dimen/call_banner_side_padding" android:paddingTop="@dimen/call_banner_top_bottom_padding" android:paddingRight="@dimen/call_banner_side_padding" android:paddingBottom="@dimen/call_banner_top_bottom_padding" android:layout_width="fill_parent" android:layout_height="80.0dip" android:layout_alignParentTop="true" style="@style/PrimaryCallInfoPrimaryCallBanner">
и видим, что она составляет android:layout_height="80.0dip", значит в строке с id="@id/photo которая отвечает за вывод фото:
Код: <ImageView android:gravity="top|center" android:id="@id/photo" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="centerCrop" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:contentDescription="@string/contactPhoto" />
добавляем новый параметр android:layout_marginTop="81.0dip" который укажет, что фото по верхнему краю, опустится под низ банера.
Способ 2) Просто изменить цвет банера с черного полупрозрачного (по умолчанию), на черный не прозрачный, но часть фото останется под ним.

7) Убираем черный фон под кнопкой "отбой" при исходящем звонке.
Для этого будем редактировать файл res\layout\ incall_touch_ui.xml, ищим строки:

Код: <com.android.internal.widget.multiwaveview.GlowPadView android:gravity="top" android:layout_gravity="bottom|center" android:id="@id/incomingCallWidget" android:background="@android:color/black" тра-та-та...
И меняем параметр android:background с @android:color/black на @android:color/transparent (с черного на полупрозрачный)

8) Убираем черный фон под "кольцами" при входящем звонке.
Для этого будем редактировать файл smali\com\android\phone\CallCard.smali, ищим строки:

Код: .restart local v2       #ringing:Z
:cond_2
iget-object v3, p0, Lcom/android/phone/CallCard;->mInCallScreen:Lcom/android/phone/InCallScreen;
invoke-virtual {v3}, Lcom/android/phone/InCallScreen;->getInCallTouchUi()Lcom/android/phone/InCallTouchUi;
move-result-object v3
invoke-virtual {v3}, Lcom/android/phone/InCallTouchUi;->getTouchUiHeight()I
move-result v1
и после последней строчки, добавляем новую: const/4 v1, 0x0

Ну вот, можно собирать наш модифицированный apk и наслаждаться полученным результатом:

(31.45 КБ) Скачиваний: 20962

P.S. А если кто то захочет, чтоб окно звонилки было на весь экран, без строки статус бара, правим файл \res\values\styles.xml:
Ищем блок с стилем Theme.InCallScreen, и в конец блока добавляем строку <item name="android:windowFullscreen">true</item>, указывающий, что тема InCallScreen будет выводится на весь экран, получится так:

Код: <style name="Theme.InCallScreen" parent="@android:style/Theme.Holo.NoActionBar">
        <item name="android:windowBackground">@android:color/black</item>
        <item name="android:windowAnimationStyle">@style/InCallAnimationStyle</item>
        <item name="android:windowFullscreen">true</item>
    </style>
А на экране так:
ANDROID--модернизация,улучшения и т.д. для смартфонов

full.jpg (86.17 КБ) Просмотров: 50498


Таким образом, поняв смысл выше описанного можно изменить все под Ваш эстетический вкус.
Удачи!!!
FishB0nd®
Источник: http://forum.china-iphone.ru/android-modernizaciya-uluchsheniya-i-t-d-dlya-smartfonov-t18833-260.html



Как сделать белый фон на на андроид

Как сделать белый фон на на андроид

Как сделать белый фон на на андроид

Как сделать белый фон на на андроид

Как сделать белый фон на на андроид

Как сделать белый фон на на андроид

Как сделать белый фон на на андроид

Как сделать белый фон на на андроид

Как сделать белый фон на на андроид

Как сделать белый фон на на андроид