Создаем ProgressBar из кода


В создании кастомного 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 в виде полоски, а не кругляшка."

Как показать клавиатуру для EditText?

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);
    }
}

ListView: Танцующий текст

Иногда случается, что при нажатии на элементы списка, некоторые из них сдвигаются на 1-2 пикселя.

Возможные варианты решения:
– если у текста выставлен параметр для высоты – wrap_content, попробуйте изменить на фиксированную высоту
– если у текста выставлен параметр gravity="center*", попробуйте убрать его совсем, что бы проверить оно или нет.
– в итоге, это оказалась проблема с разделителем списка. Самое простое решение было его просто отключить: android:divider="@null"

Создаем диалог с картинками

Причина написания поста стало то, что когда возникла идея создать такой диалог:

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

Не обошлось без помощи хороших людей, мне помогли, и я решил, поведать миру как это делать, если вы еще не умеете. Начнём……
Нам понадобится адаптер который мы возьмем из исходников андроида

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

Создаем список содержащий NumberPicker

Listview NumberPickerВ этом примере мы создали список, в котором, каждый элемент состоит из текста и NumberPicker. В качестве адаптера для списка был использован EfficientAdapter из примеров API Demos: list14.java.

NumberPicker был полностью перенесен из исходников андроида.

Замечание: не используйте рефлексию для доступа к NumberPicker. Лучше перенести полностью все исходники из андроид в свой проект.

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

Как установить контекстное меню для ListView?

Устанавливаем обработчик для контекстного меню, на текущий в Активити:

list.setOnCreateContextMenuListener(this);

И дальше реализовываем обработку.

   @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        AdapterContextMenuInfo aMenuInfo = (AdapterContextMenuInfo) menuInfo;

        // Получаем позицию элемента в списке
        int position = aMenuInfo.position;

        // Получаем данные элемента списка, тип данных здесь вы должны указать свой!
        final AdapterData data = adapter.getItem(aMenuInfo.position);

        menu.setHeaderTitle("Заголовок");
        menu.add("Первый элемент").setOnMenuItemClickListener(new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                // дествия по клику меню
                return true;
            }
        });
    }

Как сделать обтекание картинки текстом у TextView (api8)?

Этот пример поможет вам, использовать место под картинкой, которое обычно остается пустым.

Начиная с api 8 (Android 2.2) появился новый интерфейс LeadingMarginSpan2, который позволяет создавать отступ текста для N первых строк. На картинке создан отступ в 50 пикселей для 3 первых строк.

Отступ для 3 первых строк

Итак, приступим.

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

Создание оповещений с помощью Toast

Toast – это простое оповещение пользователя. При отображении занимает минимальное количество места, необходимого для отображения сообщения. С тостами нельзя взаимодействовать. При отображении используется эффект появления и затухания.

Скриншот ниже показывает пример оповещения пользователя из приложения Будильник. Как только время будильника установлено, отображается toast, который показывает через какое время включится будильник.

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