티스토리 뷰
이 문서에서는 다음 주제를 다룹니다.
Button
은
사용자의 터치에 반응해 특정 코드를 실행할 수 있는 View입니다. 버튼에는
Text
Property를 통해 사용자에게 노출될 문자열을 지정할 수 있습니다.
(Button
은
Image
Property도 제공하는데
Chapter 13. Bitmaps에서 자세히 다룹니다.)
그 외에도 다음과 같은 다양한 Propety를 제공합니다.
Button
은 외곽선에 관한 3개의 Property를 제공합니다. 그러나 이 Propety들은
플렛폼에 따라 동작방법과 형태가 다를 수 있습니다.
iOS, Android는 외곽선을 지원하지만 기본값이 다를 수 있습니다.
Windows 10에서는 BorderColor
, BorderWidth
를 지원하지만 BorderRadius
가 동작하지 않습니다.
BorderColor
(Color
Type, 기본값 Color.Default)BorderWidth
(Double
Type, 기본값 0)BorderRadius
(Double
Type, 기본값 5)
Button
은 VisualElement
와 View
를 상속하고 있으며,
따라서 BackgroundColor
, HorizontalOptions
, VerticalOptions
Propety를 제공합니다.
클릭 처리
Button
은
Clicked
이벤트를
지원하며 사용자가 버튼을 탭하는 순간 실행됩니다.
Click
이벤트 핸들러는 EventHandler
Type입니다.
이벤트가 실행될 때 전달되는 매개변수는 이벤트를 발생시킨 Button
인스턴스와
추가적인 정보를 제공하기 위한 EventArgs
인스턴스입니다.
ButtonLogger 샘플은
Clicked
이벤트 처리에 대한 코드를 제공합니다.
버튼 클릭 공유
여러 Button
은 동일한 Clicked
이벤트 핸들러를 공유할 수 있습니다.
이벤트 핸들러에서 어떤 버튼이 이벤트를 발생시켰는지 식별하기 위해서
첫번째 매개변수로 전달된 Button
인스턴스를 사용할 수 있습니다.
protected void OnButtonClicked(object sender, EventArgs args) { Button button = (Button)sender; if (button == addButton) resultLabel.Text = "Add Button clicked"; else if (button == removeButton) resultLabel.Text = "Remove Button clicked"; }
TwoButtons
샘플은 이 방법을 소개하고 있습니다. 이 샘플에서는 Button
이 유효하지 않을 때
IsEnabled
Property를 false
로 설정하는 방법도 포함하고 있습니다.
IsEnabled
가 false
로 할당된
Button
은 사용자가 터치해도 Clicked
이벤트를 발생시키지 않습니다.
익명 이벤트 핸들러
Clicked
이벤트 핸들러에 C#의 익명 람다 함수를 사용할 수 있습니다.
Button timesButton = new Button(); timesButton.Text = "Double"; //익명 이벤트핸들러를 이용하면 이벤트 핸들러 정의를 간결하게 표현할 수 있다 timesButton.Clicked += (sender, args) => { number *= 2; label.Text = number.ToString(); };
익명 람다 함수를 사용하면 이벤트 처리를 보다 간결하게 처리할 수 있지만, 이벤트를 다른 버튼과 공유하려면 복잡한 C# Reflection을 사용해야합니다. 이에 대한 예제는 ButtonLamdas 샘플에서 제공합니다.
ID를 사용하여 View 구분하기
여러 Button
들을 식별하는 또 다른 방법은
StyleId
,
AutomationId
Propety를 사용하는 것입니다.
이 Property들은 Element
에 정의되어 있으며 Xamarin.Forms는 이 Property를 사용하지 않습니다.
이 Propety들은 순전히 앱에 의해 사용될 목적으로 정의되었습니다.
AutomationId
의 경우 자동화 작업에 사용할 목적으로 정의되었습니다. (예: 테스트 자동화)
만약 자동화 작업을 사용하지 않을 예정이라면 임의의 목적으로 활용할 수 있습니다.
SimplestKeypad
샘플은 10개의 숫자 키패드 버튼에 동일한 이벤트 핸들러를 사용하고 있습니다. 각 버튼들은 StyleId
Propety를 사용하여 식별하고 있습니다.
임시 정보 저장
앱이 종료되었을 때 특정한 정보를 어딘가에 저장해두었다가
앱이 재실행되는 경우 해당 정보를 복구해야하는 요구사항이 있을 수 있습니다.
Application
Class는 일시적인 정보들을 저장하고 복구하는 Method와 Property를 제공합니다.
-
Properties
Property는 string 키와 object 값을 저장하는Dictionary
입니다.Properties
Property에 저장된 정보는 앱이 종료될 때 자동으로 앱의 로컬 저장소에 저장됩니다. 그리고 앱이 재시작할 때 값을 복구합니다.
-
Application
Class는OnStart
,OnSleep
,OnResume
Protected virtual 메서드를 제공합니다. 이 메서드는 오버라이드 가능하며 앱의 라이프 사이클이 진행되는 동안 각각 호출됩니다. -
SavePropertiesAsync
메서드를 호출하면 즉시Application
의Properties
Dictionary에 저장된 정보를 로컬 저장소에 저장합니다.
Properties
를 저장하기 위해 SavePropertiesAsync
메서드를 반드시 호출해야하는 것은 아닙니다. Properties
Dictionary에 저장된 정보는
자동으로 앱이 종료되는 순간 저장되고 앱이 시작되면 복구가 됩니다. 대신 처리되지 않은 Exception 등으로 앱이 비정상적으로
종료되는 경우에는 저장되지 않습니다. 따라서 SavePropertiesAsync
메서드는 디버깅을 목적으로 사용하거나 반드시 저장되어야 데이터가 있는 경우 사용합니다.
또 다른 유용한 Property는
Application.Current
입니다.
-
Application.Current
는 Static Property로서 현재 실행 중인Application
인스턴스를 반환합니다. 이를 통해Properties
Property에 언제든지 데이터를 저장하고 조회 할 수 있습니다.Application.Current.Properties["displayLabelText"] = displayLabel.Text;
Properties
에 값을 저장하기 위해 제일 먼저 해야할 작업은 어떤 변수를
영구적으로 보존해야하는지 파악하는 것입니다. 어떤 변수가 어디에서 생성되고 변경되는지 파악했다면,
해당 지점에서 변수 값을 Properties
에 추가하시면 됩니다.
그리고 해당 페이지의 생성자에서 Properties
에 해당 값이 존재하는지 확인 후
값을 복구할 수 있습니다.
public class MainPage: ContentPage { public MainPage() { InitializeComponent(); //Properties에서 값 복구 IDictionary<string, object> properties = Application.Current.Properties; if (properties.ContainsKey("displayLabelText")) displayLabel.Text = properties["displayLabelText"] as string; } ... //Properties에 값 저장 public void BackspaceButton_Clicked(object sender, EventArgs e) { Application.Current.Properties["displayLabelText"] = displayLabel.Text; } }
앱의 라이프사이클에 따라 코드실행이 필요한 경우
OnStart
, OnSleep
, OnResume
메서드를 사용할 수 있습니다.
OnSleep
메서드는 앱이 Foreground 상태에서
벗어날 때 호출 됩니다. 예를들어 사용자가 스마트폰의 Home 버튼을 누르거나,
실행 중인 모든 프로그램 목록을 보거나, 스마트폰을 종료할 수도 있습니다.
OnSleep
은 이렇게 프로그램이 종료되거나, Foreground 상태를 벗어나는 모든 상황에 호출됩니다.
따라서 이 메서드가 호출될 때 저장되어야할 데이터를 Properties
Dictionary에 추가해야 합니다.
OnSleep
메서드가 호출된 후 앱이 종료되지 않은 상태에서 앱이 재실행되는 경우
OnResume
이 호출됩니다. 앱이 최초로 실행될 때는 호출되지 않습니다.
이 메서드는 인터넷 연결을 확인하는 등의 목적으로 사용할 수 있습니다.
OnStart
는 프로그램이 최초로 실행되는 경우에 발생합니다.
Properties
Property의 값은 App 생성자가 호출될 때 복구되기 때문에
App의 생성자나 OnStart
에서 복구코드를 작성해도 됩니다.
PersistentKeypad 샘플은 SimplestKeypad 샘플과 매우 유사합니다. 대신 OnSleep에서 입력된 키입력을 저장하고, 페이지의 생성자에서 데이터를 복구하는 코드가 추가되어있습니다.
Xamarin.Essentials Preferences Class는 프로그램의 상태를 저장하는 또 다른 방법을 제공합니다.
관련 링크
'Xamarin.Forms Book > 요약' 카테고리의 다른 글
10장 요약. XAML Markup Extension (0) | 2018.08.18 |
---|---|
9장 요약. 플랫폼별 API 호출 (0) | 2018.08.18 |
8장 요약. 코드와 XAML의 조화 (0) | 2018.08.18 |
7장 요약. XAML 및 코드 (0) | 2018.08.15 |
5장 요약. 크기 처리 (0) | 2018.08.12 |
4장 요약. 스택 스크롤 (0) | 2018.08.12 |
3장 요약. 텍스트 자세히 알아보기 (0) | 2018.08.11 |
2장 요약. 앱 분석 (0) | 2018.08.06 |
- TypeScript
- VisualStudio
- MS SQL
- Vue
- flutter
- StringComparison
- c#
- Xamarin.Forms
- WPF
- .NET Standard
- ASP.NET Core
- Xamarin.Forms 요약
- npm
- Xamarin.iOS
- Xamarin
- Xamarin.Forms eBook
- Android
- material-ui
- React
- ios
- Total
- Today
- Yesterday