Опубликовано December 12, 2010

В создании кастомного ProgressBar нет ничего сложного при использовании xml. А вот с созданием его же через код, у некоторых появляются проблемы. Решил выложить пример создания ProgressBar. Как вы увидите дальше, в этом нет ничего сложного:
public class ProgressBarFromCode
extends Activity {
@Override
public void onCreate
(Bundle savedInstanceState
) {
super.
onCreate(savedInstanceState
);
LayoutInflater inflater = getLayoutInflater
();
LinearLayout content =
(LinearLayout) inflater.
inflate(R.
layout.
main,
null);
setContentView
(content
);
// Создаем необходимые drawable с нужными нам цветами
// в нашем случае цвет фона: #484848, цвет прогресса: #00B01B
Drawable background =
new ColorDrawable(0xFF484848
);
Drawable progress =
new ColorDrawable(0xFF00B01B
);
ClipDrawable clipProgress =
new ClipDrawable(progress,
Gravity.
LEFT,
ClipDrawable.
HORIZONTAL);
// Создаем слои, которые понимает ProgressBar
LayerDrawable layerlist =
new LayerDrawable(new Drawable[] { background, clipProgress
});
layerlist.
setId(0, android.
R.
id.
background);
layerlist.
setId(1, android.
R.
id.
progress);
// Создаем новый прогресс бар с горизонтальным стилем и нашим фоном
ProgressBar progressBar =
new ProgressBar(this,
null, android.
R.
attr.
progressBarStyleHorizontal);
progressBar.
setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.
FILL_PARENT,
LinearLayout.LayoutParams.
WRAP_CONTENT));
progressBar.
setProgressDrawable(layerlist
);
progressBar.
setProgress(42);
content.
addView(progressBar
);
}
}
Исходный код: ProgressBarFromCode.zip
p.s. Этот пример, это скорее ответ на топик на хабре Анимация под Android, или спроси у Google: "В качестве упражнения повышенной сложности попробуйте в runtime (не через XML) создать ProgressBar в виде полоски, а не кругляшка."
Опубликовано November 22, 2010
1. Создал простую разметку с кнопкой и текстовым полем ввода
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="40dp">
<Button
android:layout_height="wrap_content"
android:id="@+id/btn"
android:text="Show"
android:layout_width="fill_parent"></Button>
<EditText
android:layout_height="wrap_content"
android:id="@+id/edittext"
android:layout_width="fill_parent"></EditText>
</LinearLayout>
2. Собственно сам код:
public class InputMethodManagerTest
extends Activity {
EditText edit
;
Button btn
;
InputMethodManager imm
;
@Override
protected void onCreate
(Bundle savedInstanceState
) {
super.
onCreate(savedInstanceState
);
setContentView
(R.
layout.
input_method_manager_test);
imm =
(InputMethodManager) getSystemService
(Context.
INPUT_METHOD_SERVICE);
edit =
(EditText) findViewById
(R.
id.
edittext);
btn =
(Button) findViewById
(R.
id.
btn);
btn.
setOnClickListener(new OnClickListener
() {
@Override
public void onClick
(View v
) {
imm.
showSoftInput(edit,
InputMethodManager.
SHOW_FORCED);
}
});
}
}
Это конечно все хорошо, но этот код не будет работать если вам нужно показать клавиатуру при запуске активити.
Небольшое отступление. Поведение стандартной клавиатуры отличается на разных устройствах. Это зависит от наличия в устройстве физической клавиатуры.
– eсли нет физической клавиатуры, то программная по умолчанию будет автоматически отображаться, если фокус при запуске попадет на EditText.
– если физическая клавиатура есть, то программная будет спрятана при запуске.
Если нам нужно всегда отображать программную клавиатуру при запуске, поможет вот такой код:
private Handler mHandler =
new Handler();
private EditText myEditText
;
/**
* прячем программную клавиатуру
*/
protected void hideInputMethod
() {
InputMethodManager imm =
(InputMethodManager) getSystemService
(INPUT_METHOD_SERVICE
);
if (imm
!=
null) {
imm.
hideSoftInputFromWindow(myEditText.
getWindowToken(),
0);
}
}
/**
* показываем программную клавиатуру
*/
protected void showInputMethod
() {
InputMethodManager imm =
(InputMethodManager) getSystemService
(INPUT_METHOD_SERVICE
);
if (imm
!=
null) {
imm.
showSoftInput(myEditText,
0);
}
}
private Runnable mShowInputMethodTask =
new Runnable() {
public void run
() {
showInputMethodForQuery
();
}
};
@Override
public void onWindowFocusChanged
(boolean hasFocus
) {
super.
onWindowFocusChanged(hasFocus
);
if (hasFocus
) {
// если окно в фокусе, то ждем еще немного и показываем клавиатуру
mHandler.
postDelayed(mShowInputMethodTask,
0);
}
}
Опубликовано October 19, 2010
Иногда случается, что при нажатии на элементы списка, некоторые из них сдвигаются на 1-2 пикселя.
Возможные варианты решения:
– если у текста выставлен параметр для высоты – wrap_content, попробуйте изменить на фиксированную высоту
– если у текста выставлен параметр gravity="center*", попробуйте убрать его совсем, что бы проверить оно или нет.
– в итоге, это оказалась проблема с разделителем списка. Самое простое решение было его просто отключить: android:divider="@null"
Опубликовано August 12, 2010
Причина написания поста стало то, что когда возникла идея создать такой диалог:

В Интернете не было не одного примера или описание как такое сделать, а попадались только стандартные диалоги:

Не обошлось без помощи хороших людей, мне помогли, и я решил, поведать миру как это делать, если вы еще не умеете. Начнём……
Нам понадобится адаптер который мы возьмем из исходников андроида
Читать дальше »
Опубликовано August 10, 2010
В этом примере мы создали список, в котором, каждый элемент состоит из текста и NumberPicker. В качестве адаптера для списка был использован EfficientAdapter из примеров API Demos: list14.java.
NumberPicker был полностью перенесен из исходников андроида.
Замечание: не используйте рефлексию для доступа к NumberPicker. Лучше перенести полностью все исходники из андроид в свой проект.
Читать дальше »
Опубликовано August 3, 2010
Этот пример поможет вам, использовать место под картинкой, которое обычно остается пустым.
Начиная с api 8 (Android 2.2) появился новый интерфейс LeadingMarginSpan2, который позволяет создавать отступ текста для N первых строк. На картинке создан отступ в 50 пикселей для 3 первых строк.

Итак, приступим.
Читать дальше »
Опубликовано August 2, 2010
Следующий пример кода, поможет вам получить список всех детей любого View объекта.
Читать дальше »
Опубликовано August 1, 2010
Toast – это простое оповещение пользователя. При отображении занимает минимальное количество места, необходимого для отображения сообщения. С тостами нельзя взаимодействовать. При отображении используется эффект появления и затухания.
Скриншот ниже показывает пример оповещения пользователя из приложения Будильник. Как только время будильника установлено, отображается toast, который показывает через какое время включится будильник.

Читать дальше »