向CardFragment添加额外的图像/图标(Android Wear)

时间:2014-07-27 04:33:08

标签: android android-layout wear-os

我正在查看来自Google的这个示例图片,并试图弄清楚如何实现这样的事情。

它看起来非常类似于带有标题,描述和图标的标准CardFragment布局。但我在左边看到一个额外的时钟图像/动画,这让我觉得他们使用自定义布局。这可能与标准CardFragment有关吗?或者是否有另一个便利类允许支持多个图标?

enter image description here

2 个答案:

答案 0 :(得分:7)

我通过扩展CardFragment并覆盖onCreateContentView来完成此任务:

@Override
public View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    mRootView = (ViewGroup) inflater.inflate(R.layout.fragment_my_card, null);
    ...
}

这可让您控制白卡上的内容。

答案 1 :(得分:2)

您要显示的示例图像实际上是一个自定义通知。您需要在此处熟悉Android Wear通知:

Custom Notifications

这个练习有点冗长,所以我会尽量简短而简洁。

1)首先,您需要定义自定义通知布局,该布局在XML布局文件中定义通知的外观。要复制Google的示例,请定义一个XML布局,其中包含循环进度计时器的ImageView和锻炼描述的两个文本字段:

<?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="horizontal">
   <ImageView
    ...
   </>
   <RelativeLayout
      android:layout_marginStart="20dp"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      xmlns:android="http://schemas.android.com/apk/res/android">
      <TextView
       ...
      </>
      <TextView
       ...
      </>
  </RelativeLayout>

2)创建一个扩展Drawable API的类CircularTimer.class。这个类应该实现一个start()和stop()方法来处理计时器的倒计时。 Drawable API超出了本练习的范围,但您可以通过在进度条上搜索Web来了解更多信息。为简洁起见,这是一个例子:

public class CircularTimer() extends Drawable {
   ...
   public CircularTimer(int maxValue) { ... }

   @Override
   public void onDraw(Canvas canvas) {
      // Use drawCircle(), drawArc() to draw a circle and pie bar
      // Use drawText to draw the timeout value in center of circle
   }
   ...
}

4)创建一个WorkoutCustomView.class类,并将其内容视图设置为先前定义的XML。获取ImageView的引用并为setImageDrawable()方法设置可绘制对象。例如:

mImageView = (ImageView) findViewById(R.id.imageview);
mCircularTimer = new CircularTimer(60); // 60s countdown
mImageView.setImageDrawable(mCircularTimer);

3)设置基本通知:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
   .setContentTitle("Workout")
   .setContentText("Push Ups")
   .setSmallIcon(R.drawable.ic_bicep);

4)创建将由自定义通知启动的意图和待处理意图:

Intent i = new Intent(this, WorkoutCustomView.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

5)为WearableExtender类的setDisplayIntent()方法设置挂起的intent对象:

    NotificationCompat.WearableExtender we = new NotificationCompat.WearableExtender()    
.setDisplayIntent(pi);

// Add wearable specific features
builder.extend(wearableExtender);

6)发送您的通知

NotificationManagerCompat notificationManager =
NotificationManagerCompat.from(this);
notificationManager.notify(NOTIFICATION_ID, builder.build());

希望这有帮助!

如需进一步阅读,请结帐http://www.learnandroidwear.com/wear-custom-notification。 作者实际上实现了对您的示例的精确复制。

安德鲁