Текстовый редактор

Исходники и картинки для статьи Android::Создаем простой текстовый редактор

main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<EditText
		android:id="@+id/editText"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent"
		android:inputType="text|textMultiLine"
		android:gravity="top|left">
	</EditText>
</LinearLayout>

strings.xml


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, TextEditorActivity!</string>
    <string name="app_name">Text Editor</string>
    <string name="pref_openmode">Режим открытия</string> 
    <string	name="pref_color">Цвет</string>
	<string	name="pref_color_black">Черный цвет</string>
	<string	name="pref_color_red">Красный цвет</string>
	<string	name="pref_color_green">Зеленый цвет</string>
	<string	name="pref_color_blue">Синий цвет</string>
	<string	name="pref_size">Размер</string>
	<string	name="pref_style">Стиль</string>
	<string	name="pref_style_regular">Нормальный</string>
	<string	name="pref_style_bold">Полужирный</string>
	<string	name="pref_style_italic">Курсив</string>
</resources>

arrays.xml



<resources>
	<string-array name="text_style">
		<item>Обычный</item>
		<item>Полужирный</item>
		<item>Курсив</item>
		<item>Полужирный+Курсив</item>
	</string-array>
</resources>

preferences.xml


<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
	xmlns:android="http://schemas.android.com/apk/res/android">
	<PreferenceCategory
		android:title="Работа с файлами">
		<CheckBoxPreference
			android:key="@string/pref_openmode"
			android:title="Открыть файл"
			android:summary="Открывать файл при запуске приложения" />
	</PreferenceCategory>

	<PreferenceCategory
		android:title="Настройки шрифта">

		<EditTextPreference
			android:key="@string/pref_size"
			android:title="Размер шрифта"
			android:summary="Устанавливает новый размер шрифта"
			android:defaultValue="14"
			android:dialogTitle="Введите размер шрифта (от 10 до 32)" />

		<ListPreference
			android:key="@string/pref_style"
			android:title="Стиль для шрифта"
			android:summary="Устанавливает стиль для шрифта"
			android:defaultValue="1"
			android:entries="@array/text_style"
			android:entryValues="@array/text_style"
			android:dialogTitle="Выберите стиль для шрифта" />
			
		<PreferenceScreen
			android:key="@string/pref_color"
			android:title="Цвет текста"
			android:summary="Устанавливает цвет для текста">

			<CheckBoxPreference
				android:key="@string/pref_color_black"
				android:title="Черный"
				android:defaultValue="true"
				android:summary="Устанавливает черный цвет" />
			<CheckBoxPreference
				android:key="@string/pref_color_red"
				android:title="Красный"
				android:summary="Устанавливает красный цвет" />
			<CheckBoxPreference
				android:key="@string/pref_color_green"
				android:title="Зеленый"
				android:summary="Устанавливает зеленый цвет" />
			<CheckBoxPreference
				android:key="@string/pref_color_blue"
				android:title="Синий"
				android:summary="Устанавливает синий цвет" />
		</PreferenceScreen>
	</PreferenceCategory>
</PreferenceScreen>

TextEditorActivity.java


package ru.alexanderklimov.notepad;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.preference.PreferenceManager;

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream;
import java.io.OutputStreamWriter; 

import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.EditText; 
import android.widget.Toast; 



public class TextEditorActivity extends Activity 
{
	// Константы для меню
	public static final int IDM_OPEN = 101; 
	public static final int IDM_SAVE = 102; 
	public static final int IDM_PREF = 103;
	
	// имя файла
	private final static String FILENAME = "sample.txt"; 
	private EditText myEdit; // текстовое поле

	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myEdit = (EditText)findViewById(R.id.editText); 
    }
    
    
    @Override 
    public void onResume() 
    {
        super.onResume(); 
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
        // читаем установленное значение из CheckBoxPreference 
        if (prefs.getBoolean(getString(R.string.pref_openmode), false))
        {
            openFile(FILENAME); 
        }
        
        // читаем размер шрифта из EditTextPreference 
        float fSize = Float.parseFloat( 
            prefs.getString(getString(R.string.pref_size), "20")); 
        // применяем настройки в текстовом поле 
        myEdit.setTextSize(fSize); 
        
        // читаем стили текста из ListPreference 
        String regular = prefs.getString(getString(R.string.pref_style), "");
        int typeface = Typeface.NORMAL; 
        
        if (regular.contains("Полужирный")) 
            typeface += Typeface.BOLD; 
        
        if (regular.contains("Курсив")) 
            typeface += Typeface.ITALIC; 
        
        // меняем настройки в EditText 
        //myEdit.setTextSize(fSize); 
        myEdit.setTypeface(null, typeface); 
        
        // читаем цвет текста из CheckBoxPreference 
        // и суммируем значения для получения дополнительньк цветов текста 
        int color = Color.BLACK; 
        if (prefs.getBoolean(getString(R.string.pref_color_red), false)) 
             color += Color.RED; 
        if (prefs.getBoolean(getString(R.string.pref_color_green), false)) 
             color += Color.GREEN; 
        if (prefs.getBoolean(getString(R.string.pref_color_blue), false)) 
             color += Color.BLUE; 
        
        myEdit.setTextColor(color); 
    }

    
    // Создаем меню
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
        menu.add(Menu.NONE, IDM_OPEN, Menu.NONE, "Открыть"); 
            
        menu.add(Menu.NONE, IDM_SAVE, Menu.NONE, "Сохранить")
            .setIcon(android.R.drawable.ic_menu_save);
        
        menu.add(Menu.NONE, IDM_PREF, Menu.NONE, "Настройки");
                    
        return(super.onCreateOptionsMenu(menu)); 
    }
    
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    {
        switch (item.getItemId())
        {
            case IDM_OPEN: 
                openFile(FILENAME); 
                break; 
            case IDM_SAVE: 
                saveFile(FILENAME); 
                break; 
            case IDM_PREF: 
            	Intent intent = new Intent(); 
            	intent.setClass(this, SettingsActivity.class); 
            	startActivity(intent); 
            	break; 
            default: 
                return false; 
        }
          return true; 
    }
    
    // Метод для открытия файла
    private void openFile(String fileName)
    {
		try
		{
			InputStream inStream = openFileInput(FILENAME);
			
			if(inStream != null)
			{
				InputStreamReader sr = new InputStreamReader(inStream);
				BufferedReader reader = new BufferedReader(sr);
				String str;
				StringBuffer buffer = new StringBuffer();
				
				while((str = reader.readLine()) != null)
				{
					buffer.append(str + "\n");
				}
				
				inStream.close();
				myEdit.setText(buffer.toString());
			}
		}
		catch(Throwable t)
		{
			Toast.makeText(getApplicationContext(), 
					"Exception: " + t.toString(), Toast.LENGTH_LONG).show();
		}
	}
    
    // Метод для сохранения файла
    private void saveFile(String FileName) 
    {
        try 
        { 
            OutputStream outStream = openFileOutput(FILENAME, 0); 
            OutputStreamWriter sw = new OutputStreamWriter(outStream); 
            sw.write(myEdit.getText().toString()); 
            sw.close(); 
        }
        catch (Throwable t) 
        {
            Toast.makeText(getApplicationContext(), 
                "Exception: " + t.toString(), Toast.LENGTH_LONG) 
            .show(); 
        }
    }
}

SettingsActivity.java


package ru.alexanderklimov.notepad;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class SettingsActivity extends PreferenceActivity
{
	@Override 
	public void onCreate(Bundle savedInstanceState)
	{
	    super.onCreate(savedInstanceState); 
	    // загружаем предпочтения из ресурсов 
	    addPreferencesFromResource(R.xml.preferences); 
	}
}

Рисунки

Настройки
Настройки Настройки
Настройки Настройки