Кастомизация RadioButton в Android

Привет! Продолжая тему кастомизации элементов интерфейса Android хочу описать, как кастомизировать RadioButton.

Что бы создать кастомный стиль для RadioButton нужно создать drawable-ресурс, содержащий 4 иконки:

 Pressed  Checked
 True  True
 True  False
 False  True
 False  False

Поместите ваши изображения в res\drawable\ Далее нужно создать описание для этих ресурсов. Селектор.

Для этого нужно создать файл, например res\drawable\button_radio.xml в втором и будут описано, когда какую картинку размещать.

Пример:

1
2
3
4
5
6
7
8
9
10
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="true" android:state_pressed="false"
      android:drawable="@drawable/radio_on"/>
  <item android:state_checked="false" android:state_pressed="false"
      android:drawable="@drawable/radio_off"/>
  <item android:state_checked="true" android:state_pressed="true"
      android:drawable="@drawable/radio_on_pressed"/>
  <item android:state_checked="false" android:state_pressed="true"
      android:drawable="@drawable/radio_off_pressed"/>
</selector>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="true" android:state_pressed="false"
      android:drawable="@drawable/radio_on"/>
  <item android:state_checked="false" android:state_pressed="false"
      android:drawable="@drawable/radio_off"/>
  <item android:state_checked="true" android:state_pressed="true"
      android:drawable="@drawable/radio_on_pressed"/>
  <item android:state_checked="false" android:state_pressed="true"
      android:drawable="@drawable/radio_off_pressed"/>
</selector>

Подключить его из разметки можно при помощи следующей строки:

1
android:button="@drawable/button_radio"
android:button="@drawable/button_radio"

А из JAVA кода можно так:

1
2
RadioButton newRadioButton = new RadioButton(this);
newRadioButton.setButtonDrawable(R.drawable.radio_button);
RadioButton newRadioButton = new RadioButton(this);
newRadioButton.setButtonDrawable(R.drawable.radio_button);

В коде выше описаны не все атрибуты.

Android: Кастомизация кнопок (image)

Привет!

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

  • С использованием стандартных форм Shapes
  • С использованием изображений, которые накладываются на кнопку.

Сейчас я расскажу про второй способ, так как я столкнулся с проблемой — при использовании стандартных примитивов, невозможно создать составную форму, можно только выбрать из существующих форм, а они весьма ограниченны. Если нужно что-то более сложное — тогда только второй вариант, но мне кажется я слишком непонятное нечто пишу, так что к делу.

Continue reading

Java: Доступ к членам класса

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

 Описание класса Private Без модификатора Protected Public
 Один и тот же класс  Да  Да  Да  Да
 Подкласс класса этого же пакета  Нет  Да  Да  Да
 Класс этого же пакета не являющийся подклассом  Нет  Да  Да  Да
 Подкласс класса другого пакета  Нет  Нет  Да  Да
 Класс другого пакета, не являющийся подклассом класса данного пакета  Нет  Нет  Нет  Да

 

Заготовка для работы с SQLite в Android

Маленький шаблон, для работы с SQLite:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class DBAdapter 
{
    private static final String DATABASE_NAME = "test";
    private static final int DATABASE_VERSION = 1;
 
    private final Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;
 
    public DBAdapter(Context ctx)
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }
    private static class DatabaseHelper extends SQLiteOpenHelper
    {
        DatabaseHelper(Context context)
        {
            super(context,DATABASE_NAME, null, DATABASE_VERSION);
        }
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
 
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
 
        }
    }
    public SQLiteDatabase GetDataBaseOpen() throws SQLException
    {
        return this.db;
    }
    public DBAdapter Open() throws SQLiteException
    {
        db = DBHelper.getWritableDatabase();
        return this;
    }
    public DBAdapter OpenForRead() throws SQLiteException
    {
        db = DBHelper.getReadableDatabase();
        return this;
    }
    public void Close() 
    {
        DBHelper.close();
    }
}
public class DBAdapter 
{
	private static final String DATABASE_NAME = "test";
	private static final int DATABASE_VERSION = 1;

	private final Context context;
	private DatabaseHelper DBHelper;
	private SQLiteDatabase db;

	public DBAdapter(Context ctx)
	{
		this.context = ctx;
		DBHelper = new DatabaseHelper(context);
	}
	private static class DatabaseHelper extends SQLiteOpenHelper
	{
		DatabaseHelper(Context context)
		{
			super(context,DATABASE_NAME, null, DATABASE_VERSION);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// TODO Auto-generated method stub

		}
	}
	public SQLiteDatabase GetDataBaseOpen() throws SQLException
	{
		return this.db;
	}
	public DBAdapter Open() throws SQLiteException
	{
		db = DBHelper.getWritableDatabase();
		return this;
	}
	public DBAdapter OpenForRead() throws SQLiteException
	{
		db = DBHelper.getReadableDatabase();
		return this;
	}
	public void Close() 
	{
		DBHelper.close();
	}
}

Как получить SSID Wi-Fi сети из Android-приложения

Возникла необходимость получить SSID сети из Android приложения. Облазил StackOverflow вдоль и поперек… Ответ помечен как правильный. но я имплементирую код который дан и… приложение на нем останавливается. Долго я мучился. Оказывается, нужно добавить Permission…, а лучше два. Код почти полностью из ответа, но у меня он полностью не заработал, так что пришлось удалить ту часть, которая не работает:

1
2
3
4
5
6
7
8
9
10
11
12
13
private String getCurrentSsid(Context context) {
          String ssid = null;
          ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
          NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
          if (networkInfo.isConnected()) {
            final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
            if (connectionInfo != null) {
              ssid = connectionInfo.getSSID();
            }
          }
          return ssid;
        }
private String getCurrentSsid(Context context) {
		  String ssid = null;
		  ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
		  NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
		  if (networkInfo.isConnected()) {
		    final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
		    final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
		    if (connectionInfo != null) {
		      ssid = connectionInfo.getSSID();
		    }
		  }
		  return ssid;
		}

Метод возвращает название SSID (строка) или null если wi-fi не подключен.

Для работы требуются следующие разрешения:

1
2
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Java: GUI приложение для работы с текстовыми файлами

Привет, читатель :)

Дали вот такое задание, для написание на Java и обязательно в среде NetBeans:

Написать программу, которая должна уметь:

  1. Открывать каталог, типа С:\users\
  2. Выводить из каталога в Combobox файлы
  3. По нажатию кнопки «открыть» открывать в редактор текстовый файл из каталога
  4. При изменении файла и нажатии на кнопку «сохранить» сохранять изменения в том же файле который был открыт

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

Continue reading

Настройка listview items с собственным ArrayAdapter


Для реальных коммерческих мобильных приложений, стиль по-умолчанию и вид ListView в Android не привлекателен. Он может лишь отображать простую строку в каждой строке ListView, используя внутренний контролл (элемент) TextView. Для большинства приложений, вы захотите создать интерфейс, который более приятен для пользователя. Хорошо, что ListView очень мощный контрол и с помощью своих разметок элемента он может быть легко изменен что бы соответствовать вашим потребностям. В этом руководстве я покажу вам, как вы можете создать свои элементы ListView с иконками, своей разметкой заголовка и как вы можете  использовать настроенный ArrayAdapter что бы создавать что угодно на основе ArrayAdapter в будущем. Я также расскажу некоторые советы, которые вы можете использовать для оптимизации использования памяти вашим ListView.

Android_Custom_ListView_ArrayAdapter

Continue reading

Java: Транспонированная матрица

Начал учить JAVA. Первая программа пусть будет транспонированная матрица. Мне код понятен, очень похоже на c/c++/c#.

Я модифицировал эту программу написанную на си

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

Continue reading