Android 학습 의 AppWidget 노트 공유
오늘 의 목 표 는 간단 한 AppWidget 을 만 드 는 것 입 니 다.
우선 제 가 먼저 목록 구 조 를 보 여 드 려 서 여러분 이 이해 하 실 수 있 도록 하 겠 습 니 다.
첫 번 째 단계:res 디 렉 터 리 에 folder 를 만들어 야 합 니 다.xml 라 고 명명 할 수 있 습 니 다.(그러나 이것 은 필요 한 것 이 아 닙 니 다.당신 도 좋아 하 는 이름 으로 바 꿀 수 있 습 니 다)그리고 이 디 렉 터 리 아래 xml 파일 을 만 듭 니 다.내 appwidget.xml 파일 코드 는 다음 과 같 습 니 다.
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="72dp"
android:minWidth="294dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/example_widget"
>
</appwidget-provider>
작은 주석:안 드 로 이 드 의 네 임 스페이스 에서 appwidget 의 최소 높이,너비,업데이트 시간(밀리초 단위)과 가장 중요 한 바 인 딩 된 레이아웃 파일(레이아웃 파일 이란 데스크 톱 에 보 여 주 는 인터페이스의 외관)을 설명 합 니 다.
두 번 째 단계:아래 의 이 파일 은 위의 appwidget.xml 의 initialLayout 속성 에 연 결 된 xml 레이아웃 파일,즉 example 입 니 다.widget.xml,코드 는 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textview1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="MyFirst Widget Example!"
>
</TextView>
<!-- , TextView -->
</LinearLayout>
세 번 째 단계:레이아웃 디 스 플레이 인 터 페 이 스 를 실현 했다.다음은 자 연 스 럽 게 이 레이아웃 인 터 페 이 스 를 어떻게 보 여 줘 야 할 지 생각 하 게 될 것 이다.그래서 provider 가 있어 야 한다.따라서 AppWidgetProvider 를 계승 한 실례 를 만들어 서 이 기능 을 완성 해 야 한다.제 파일 이름 은 Widget.java 입 니 다.
package com.summer.widgettest;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
/**
* , , “ ”
*/
public class Widget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
System.out.println("onUpdate");
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
// TODO Auto-generated method stub
System.out.println("onDeleted");
super.onDeleted(context, appWidgetIds);
}
@Override
public void onDisabled(Context context) {
// TODO Auto-generated method stub
System.out.println("onDisabled");
super.onDisabled(context);
}
@Override
public void onEnabled(Context context) {
// TODO Auto-generated method stub
System.out.println("onEnabled");
super.onEnabled(context);
}
}
네 번 째 단계:이것 도 가장 관건 적 인 단계 입 니 다.앞의 일 은 모두 이 단 계 를 위해 기 초 를 다 지 는 것 이기 때 문 입 니 다.그럼 어떻게 해 야 돼 요?정 답 은 리스트 파일 입 니 다.리스트 파일 에 성명 을 하면 됩 니 다.나의 코드 는 다음 과 같다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.summer.widgettest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.summer.widgettest.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.summer.widgettest.Widget">
<intent-filter >
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info"/>
</receiver>
</application>
</manifest>
작은 주석:여기 서 우리 도 알 아 보기 어렵 지 않 습 니 다.원래 widget 은 라디오 사건 이 었 습 니 다.그래서 receiver 를 사용 해 야 합 니 다.그 다음 에 inent-filter 필 터 를 사용 해 야 합 니 다.기능 은 요구 에 부 합 된 action 을 걸 러 내 는 것 입 니 다.여기 서 당연히 widget 동작 입 니 다.
다음은 meta-data 메타 데이터 해석 이 있 습 니 다.역할 은 바로 이 widget 에 대해 설명 하 는 역할 이자 안 드 로 이 드 시스템 에 이것 이 도대체 무엇 인지 알 리 기 위해 서 입 니 다.몰래 알려 줄 게,보통 이 두 가지 포 인 트 는 고정된 표현 이 야)
자,모든 것 이 갖 추어 져 있 습 니 다.'운행'만 부족 합 니 다.다음은 프로그램 이 실 행 된 후의 인터페이스 입 니 다.위의 그 줄 의 문 자 는 프로그램 이 실 행 된 후 이다.
바로 우리 가'자제'한 앱 위 젯 의 결 과 를 볼 수 있다.솔직히 별로 안 예뻐요.
회고 와 총 결:
1.이 앱 위 젯 은 어떻게 이 루어 졌 나 요?먼저 res 폴 더 아래 xml 폴 더 를 만 들 고 그 안에 app widget-provider 파일 을 추가 한 다음 내용 을 보 여 주 는 레이아웃 파일 을 작성 합 니 다.다음은 AppWidgetProvider 의 클래스 를 계승 하여 만 든 다음 목록 파일 에서 관련 항목 을 설명 하면 됩 니 다.
2.논리 적 사고 가 매우 중요 하고 모든 단계 의 연결 은 사고의 유도 점 이다.
3.여 기 는 간단 한 작은 예 일 뿐 입 니 다.그 다음 에 해 야 할 일 은 이 widget 과 우리 시스템 이 어떻게 상호작용 을 하 게 하 는 지 입 니 다.
4.좋 습 니 다.대체적으로 이 렇 습 니 다.많은 친구 들 의 댓 글 을 환영 합 니 다.저 는 반드시 겸허 하 게 받 아들 이 겠 습 니 다.여러분 과 함께 발전 하 기 를 바 랍 니 다!
여 기 는 화려 한 경계선 이다.
위 에 있 는 것 은 간단 한 app Widget 을 만 드 는 예제 입 니 다.다음은 이러한 Widget 을 어떻게 실현 하 는 지 에 관 한 동작 검색 입 니 다.
지식 포인트 준비:
안 드 로 이 드 의 widget 프로 세 스 는 프로그램 이 실행 하 는 프로 세 스 와 같은 프로 세 스 가 아니 라 는 것 을 알 아야 합 니 다.이것 은 우리 가 평소 처럼 setOnClickListener 방법 을 간단하게 사용 할 수 없다 는 것 을 의미 합 니 다.왜냐하면 이렇게 하 는 것 은 관련 동작 에 대한 검색 을 완성 할 수 없 기 때 문 입 니 다.그러면 문제 가 생 겼 습 니 다.우 리 는 어떻게 이런 동작의 상호작용 을 실현 해 야 합 니까?
조급해 하지 마 세 요.답 은 RemoteViews 를 사용 하 는 것 입 니 다.말 그대로'원 격'방식 으로 관련 처리 작업 을 실현 하 는 것 입 니 다.다음은 구체 적 인 실현 절 차 를 살 펴 보 자.
첫 번 째 단계:이전 appWidget 의 레이아웃 파일 에 단 추 를 추가 하여 레이아웃 을 실현 합 니 다.
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Click To Renew!"
>
</Button>
두 번 째 단계:그리고 Widget.java 라 는 AppWidget Provider 의 실현 클래스 의 onUpdate 방법 에서 관련 코드 를 실현 합 니 다.효 과 를 잘 보 여주 기 위해 서 는 버튼 을 누 른 후에 뛰 는 화면 을 보 여 주 는 Activity 를 새로 만 들 수 있 습 니 다.저 는 RenewActivity.java 라 고 이름 을 지 었 습 니 다.관련 소스 코드 는 다음 과 같 습 니 다.
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
System.out.println("onUpdate");
for(int i=0;i<appWidgetIds.length;i++){
//check which appwidget is enabled!
System.out.println(appWidgetIds[i]);
Intent intent=new Intent(context,RenewActivity.class);
PendingIntent pendingIntent=PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews remoteViews=new RemoteViews(context.getPackageName(), R.layout.example_widget);
remoteViews.setOnClickPendingIntent(R.id.button1, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
RenewActivity.java
package com.summer.widgettest;
import android.app.Activity;
import android.os.Bundle;
public class RenewActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.renew);
}
// renew ( TextView ),
}
세 번 째 단계:목록 파일 에서 Activity 의 성명 을 하 는 것 을 잊 지 마 세 요.그렇지 않 으 면 인터페이스의 효 과 를 볼 수 없습니다.
<activity
android:name="com.summer.widgettest.RenewActivity"
android:label="Renew Activity!"
>
</activity>
효과 도 는 다음 과 같다.요약:
Widget 의 onUpdate 방법 에서 저 희 는 RemoteViews 류 의 인 스 턴 스 를 사 용 했 습 니 다.역할 을 하면 더 이상 상세 하 게 설명 하지 않 고 코드 의 기능 을 직접 설명 합 니 다.예 를 들 어 인 스 턴 스 를 만 들 때 상하 문 대상 의 패키지 이름과 widget 의'레이아웃'이라는 두 개의 매개 변수 가 필요 합 니 다.그 다음 에 단 추 를 누 르 는 시간 에 검색 할 때 pendingIntent 라 는 인 스 턴 스 를 사 용 했 습 니 다.그 역할 은 원 격 메시지 정 보 를 해당 하 는 처리 논리 에 전달 하여 widget 의 단추 동작 에 대한 검색 처 리 를 실현 하 는 것 입 니 다.그리고 app WidgetManager 를 사용 하여 업데이트 작업 을 하면 됩 니 다!이렇게 하면 우리 코드 의 논 리 를 완성 할 수 있다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.