четверг, 26 марта 2015 г.

Convert mkv to mp4 on Linux



Ставший популярным видео формат mvk поддерживается не всеми плеерами и редакторами. Однако, для операционных систем Linux доступен инструмент под названием avconv, поставляемый с пакетом libav-tools, с помощью которого можно преобразовывать видео файлы из одного формата в другой.

Установите его следующей командой:

sudo apt-get install libav-tools

Для преобразования файла из формата mkv в mp4 воспользуйтесь командой:

avconv -i input.mkv -codec copy output.mp4

Это автоматически преобразует файл в формат mp4 путем копирования потоков без их перекодирования (-code copy).

среда, 25 марта 2015 г.

Android. Add custom button to SearchView

Некоторые Android приложения оперируют большим числом данных, поиск которых обычно осуществляется через действие поиска:


Добавления этой функциональности в приложение хорошо описано в этих статьях:

Однако, добавление собственных кнопок в SearchView не такая уж и простая задача.

Для этого необходимо:
1. Создать экземпляр кнопки;
2. Найти в разметке SearchView элемент, в который можно поместить кнопку;
3. Поместить кнопку в найденный View.

Разметка кнопки


В папке layout создайте xml файл для кнопки, которую нужно поместить в SearchView. Я назвал его search_view_custom_button.xml:

<?xml version="1.0" encoding="utf-8"?>
<ImageButton
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/custom_button"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="center_vertical"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:src="@drawable/custom_button_icon"
    android:background="?android:attr/selectableItemBackground"
    android:focusable="true"/>

Задайте кнопке id и изображение (src).
Атрибуту android:background задано стандартное значение "?android:attr/selectableItemBackground", которое обеспечивает анимацию нажатия на кнопку в строке поиска.

Создание экземпляра кнопки


"Надуйте" экземпляр кнопки из только что созданной разметки:

final ImageButton customButton = (ImageButton) getLayoutInflater().inflate(R.layout.search_view_custom_button, null);

Добавление кнопки в SearchView


Разметка SearchView имеет следующую структуру:

<LinearLayout android:id="@+id/search_bar">
  <TextView android:id="@+id/search_badge/> <ImageView android:id="@+id/search_button"/>
  <LinearLayout android:id="@+id/search_edit_frame"
    <ImageView android:id="@+id/search_mag_icon"/>
    <LinearLayout android:id="@+id/search_plate">
      <view class="android.widget.SearchView$SearchAutoComplete"
          android:id="@+id/search_src_text"/>
      <ImageView android:id="@+id/search_close_btn"/>
    </LinearLayout>
    <LinearLayout android:id="@+id/submit_area">
      <ImageView android:id="@+id/search_go_btn"/>
      <ImageView android:id="@+id/search_voice_btn"
    </LinearLayout>
  </LinearLayout>
</LinearLayout>


search_plate - Элемент со строкой поиска и кнопкой очистки.
submit_area - Элемент с кнопкой голосового поиска.

Добавить кнопку можно в любую часть разметки. В рамках примера добавим кнопку рядом с кнопкой голосового поиска:

SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
LinearLayout searchViewSubmitArea = (LinearLayout) searchView.findViewById(R.id.submit_area);
searchViewSubmitArea.addView(searchViewCustomButton);


Для корректного отображения кнопки настройте параметры разметки:

searchViewCustomButton.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT));

Готово! Кнопка добавлена прямо в строку поиска: