일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- flutter
- Image.network
- listview
- Row Widget
- Snackbar
- WillPopScope
- Flutter 앱 배포
- InkWell
- Flutter Example
- MainAxisAlignment
- HTTP
- Flutter Tutorial
- Flutter 강좌
- Load Image
- FutureBuilder
- Networking
- AppBar
- Column Widget
- Row
- sqlite
- Scaffold
- CrossAxisAlignment
- Flutter 예제
- node.js
- navigator
- Hello World
- Cached Image
- ListView.builder
- 반석천
- ListTile
- Today
- Total
목록Development (192)
꿈꾸는 시스템 디자이너
Activity가 Service를 바인딩하고 서비스를 호출하는 앱을 개발할 때, 주로 특적 View를 클릭될 때 서비스내 메소드가 호출되도록 구현한다. 하지만 때에 따라서는 앱(엑티비티)가 시작되면서 서비스를 바인딩하고, 바로 서비스내 메소드를 호출할 필요가 있는데 이를 구현하기 위해서 Activity내의 onCreate() 안에서 서비스 메소드를 호출하면 에러가 발생한다. 이는 서비스가 아직 바인드 되지 않은 상태에서 서비스 메소드를 호출하기 때문이다. 앱이 실행하면서 바로 호출할 서비스 메소드가 있다면, onCreate()가 아닌 서비스 바인딩을 위해 구현한 ServiceConnection내의 onServiceConnected()내에서 호출하면 해결된다.
Activity에서 Intent를 이용하여 새로운 Activity나 Service를 실행하면 피호출되는 Activity나 Service의 onCreate()나 onStartCommand()에서 수신되는 Intent의 action값에 따라 적절한 처리를 하게 된다. 이 때 아주 바보 같은 실수를 저지를 수 있음에 주의를 요한다. ㅡ,ㅡ public int onStartCommand(Intent intent, int flags, int startId) { if(isAlive == false) startPamService(); String action = intent.getAction(); if(action == null) return super.onStartCommand(intent, flags, start..
앱위젯상에서 ProgressDialog를 표시할 필요가 많으나 정작 앱위젯에서는 ProgressDialog를 직접 실행 시킬 수 없다. 이를 해결하기 위해서는 ProgressDialog를 가지는 Activity를 실행시켜서 동일 효과를 주는 방법을 이용한다. 이를 위해선 부가적으로 activity를 투명하게 처리해야 한다. 우선 원하는 기능은 아래의 그림과 같다. 위젯이 동작하는 바탕화면에서 버튼을 클릭하면 ProgressDialog가 나타나는 것이다. 우선 앱위젯에 의해 실행될 ProgressDialog를 가지는 Activity를 투명하게 처리하기 위해서는, 메니페스트파일에 해당 activity를 투명으로 처리한다. android:theme="@android:style/Theme.Translucent...
본 포스트에서는 setOnClickPendingIntent를 통해 위젯내에 위치한 View 객체를 클릭했을 때 위젯을 재구성하는 예제를 살펴본다. 메니페스트파일부터 살펴보면, 20번째줄부터 브로드캐스트 리스버를 정의하고 있다. AppWidget은 일종의 브로드캐스트리시버이기 때문에 로 선언한다. 21번째 줄은 AppWidget을 구현하는 클래스파일을 명시한 것이고, 22번째 줄은 위젯 목록에 표시할 위젯의 이름을 의미한다. 실제 아래의 그림처럼 표시된다. 25번째줄부터, 위젯에서 수신할 액션을 를 통해 정의한다.35번째 줄은 이 브로드캐스트리시버가 앱위젯이라는 것을 명시하는 것이고, 이 앱위젯에 대한 정보를 기술한 파일의 위치와 파일명을 명시한다(36번째 줄). 실제로 res폴더에 xml이란 폴더를 생성..
앞선 포스트(AppWidget에서의 View 제어)에서는 언급한 것과 같이 AppWidget에서는 각각의 View객체를 직접 생성해서 이용할 수 없으므로, remoteViews.setInt(View객체ID, "제어메소드명",제어값) 방식으로 View객체를 제어한다. 이 View 객체에 onClick 이벤트를 적용하기 위해서는 setOnClickPendingIntent() 메소드를 이용한다. void android.widget.RemoteViews.setOnClickPendingIntent(int viewId, PendingIntent pendingIntent) 일반적으로 아래와 같은 방식으로 이용한다. remoteViews.setOnClickPendingIntent(R.id.rightButtonsRigh..
AppWidget은 일종의 브로드캐스트이기 때문에 일반 Activity에서 처럼 View 객체들을 생성해서 이용할 수 없다. 그래서 View 객체 제어를 위해서는 우선 Layout을 적용할 RemoteViews 객체를 생성하고, RemoteViews 개체 내부의 실제 각각의 View 객체들을 제어할 수 있다. 별도의 View 인스턴스를 생성하지 않고 아래와 같이 Layout에 미리 선언한 View들의 id를 이용해서 제어만 가능한다. 우선 아래와 같이 RemoteViews의 인스턴스를 생성한다. RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget_main); 생성한 인스턴스에 setInt() 메소드를 이용해서..
GUI를 구성할 때 롤오버 기능을 넣으면 보다 다이나믹한 느낌을 줄 수 있다.주로 객체를 터치할 때 반응하도록 하는데, 객체의 배경색을 바꾸거나 객체 내의 텍스트의 색상을 바꾸게 된다. 일반적으로 XML을 통해 Layout을 구성할 때 텍스트 색상은 android:textColor 속성을 이용해서 설정하고, 배경색은 android:background 속성을 이용해서 설정한다.롤 오버 기능을 이용하려면 위의 두 속성에 selector를 작성해서 연결해 주면 된다. 위의 소스를 보면, 라인 21, 28, 46, 54 에서 TextView의 textColor 속성을 값으로 "@color/selector_button"이란 값을, 라인 11, 54 에서 LinearLayout의 background 속성의 값으로 ..
한 Activity내에 GUI의 구성이 복잡할 때 이를 모듈화할 때 Fragment가 사용된다. 즉 한 Activity를 구성할 GUI 조각들의 집합이다.우선 Layout의 구성부터 살펴보자. MainActivity 엑티비티를 구성하는 activity_main.xml의 내용으로 두개의 프레그먼트를 가지고 있다. line 16,17첫번째 프레그먼트의 id와 name 등을 정의하고 있다. - id: 참조를 위한 id이며, 동시에 프레그먼트의 레이아웃 xml 파일명- name: 프레그먼트를 구현한 패키지 및 클래스명line 32,33윗 내용을 참고하면, 두번째 프레그먼트는 com.example.fragmenttest 패키지내에 TailFragment.java 파일로 구현될 것이며, 프레그먼트의 레이아웃은 la..