2016-11-10 36 views
1

下面是我用讀心臟速率從可穿戴式的代碼:文本框添加到穿戴式屏幕 - 初級

import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.support.wearable.activity.WearableActivity; 
import android.util.Log; 
import android.widget.TextView; 
import android.hardware.*; 
import android.support.wearable.view.BoxInsetLayout.*; 

public class MainActivity extends WearableActivity implements SensorEventListener { 

    private static final String TAG = "MainActivity"; 
    private TextView mTextViewHeart; 
    SensorManager mSensorManager; 
    Sensor mHeartRateSensor; 
    SensorEventListener sensorEventListener; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_activity); 


     mTextViewHeart = new TextView(this); 
     mTextViewHeart.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     mTextViewHeart.setText("heart rate "); 

     mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE)); 
     mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE); 
     // mSensorManager.registerListener(this, mHeartRateSensor, SensorManager.SENSOR_DELAY_NORMAL); 
     Log.i(TAG, "LISTENER REGISTERED."); 
     mTextViewHeart.setText("Something here"); 

     mSensorManager.registerListener(this, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST); 

     // mSensorManager.registerListener(sensorEventListener, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST); 
    } 


    public void onResume(){ 
     super.onResume(); 
    } 

    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     Log.d(TAG, "onAccuracyChanged - accuracy: " + accuracy); 
    } 

    public void onSensorChanged(SensorEvent event) { 
     if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) { 
      String msg = "" + (int)event.values[0]; 
      mTextViewHeart.setText(msg); 
      Log.d(TAG, msg); 
     } 
     else 
      Log.d(TAG, "Unknown sensor type"); 
    } 

} 

main_activity.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="@color/white"> 

    <android.support.wearable.view.GridViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.wearable.view.DotsPageIndicator 
     android:id="@+id/page_indicator" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="10dp" 
     android:padding="5dp" 
     android:background="@drawable/rounded_background"> 
    </android.support.wearable.view.DotsPageIndicator> 

</RelativeLayout> 

傳感器功能似乎精細。文本框沒有顯示在屏幕上,而是我剛收到一個空白屏幕。如何以編程方式將mTextViewHeart添加到屏幕上?或者需要我通過main_activity.xml添加它?

更新:

import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.support.wearable.activity.WearableActivity; 
import android.util.Log; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 
import android.hardware.*; 
import android.support.wearable.view.BoxInsetLayout.*; 

public class MainActivity extends WearableActivity implements SensorEventListener { 

    private static final String TAG = "MainActivity"; 
    private TextView mTextViewHeart; 
    SensorManager mSensorManager; 
    Sensor mHeartRateSensor; 
    SensorEventListener sensorEventListener; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_activity); 
     RelativeLayout relativeLayout = (RelativeLayout)findViewById(R.id.parent); 

     mTextViewHeart = new TextView(this); 
     mTextViewHeart.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     mTextViewHeart.setText("heart rate "); 

     mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE)); 
     mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE); 
     Log.i(TAG, "LISTENER REGISTERED."); 
     mTextViewHeart.setText("Something here"); 

     mSensorManager.registerListener(this, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST); 


     relativeLayout.addView(mTextViewHeart); 

    } 


    public void onResume(){ 
     super.onResume(); 
    } 

    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     Log.d(TAG, "onAccuracyChanged - accuracy: " + accuracy); 
    } 

    public void onSensorChanged(SensorEvent event) { 
     if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) { 
      String msg = "" + (int)event.values[0]; 
      mTextViewHeart.setText(msg); 
      Log.d(TAG, msg); 
     } 
     else 
      Log.d(TAG, "Unknown sensor type"); 
    } 

} 

main_activity.xml:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/parent" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/white"> 

    <android.support.wearable.view.GridViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.wearable.view.DotsPageIndicator 
     android:id="@+id/page_indicator" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="10dp" 
     android:padding="5dp" 
     android:background="@drawable/rounded_background"> 
    </android.support.wearable.view.DotsPageIndicator> 

</RelativeLayout> 

我已經與Pavneet辛格的答案,但顯示黑屏更新。

也許應該通過XML配置所有UI?

UPDATE2:

更新使用的LinearLayout不產生影響:

<?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:paddingLeft="16dp" 
    android:paddingRight="16dp" 
    android:orientation="vertical" > 

    <android.support.wearable.view.GridViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.wearable.view.DotsPageIndicator 
     android:id="@+id/page_indicator" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="10dp" 
     android:padding="5dp" 
     android:background="@drawable/rounded_background"> 
    </android.support.wearable.view.DotsPageIndicator> 

</LinearLayout> 

package com.example.android.wearable.datalayer; 

import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.support.wearable.activity.WearableActivity; 
import android.util.Log; 
import android.widget.LinearLayout; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 
import android.hardware.*; 
import android.support.wearable.view.BoxInsetLayout.*; 

public class MainActivity extends WearableActivity implements SensorEventListener { 

    private static final String TAG = "MainActivity"; 
    private TextView mTextViewHeart; 
    SensorManager mSensorManager; 
    Sensor mHeartRateSensor; 
    SensorEventListener sensorEventListener; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_activity); 
     LinearLayout relativeLayout = (LinearLayout)findViewById(R.id.parent); 

     mTextViewHeart = new TextView(this); 
     mTextViewHeart.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     mTextViewHeart.setText("heart rate "); 

     mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE)); 
     mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE); 
     Log.i(TAG, "LISTENER REGISTERED."); 
     mTextViewHeart.setText("Something here"); 

     mSensorManager.registerListener(this, mHeartRateSensor, mSensorManager.SENSOR_DELAY_FASTEST); 


     relativeLayout.addView(mTextViewHeart); 

    } 


    public void onResume(){ 
     super.onResume(); 
    } 

    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     Log.d(TAG, "onAccuracyChanged - accuracy: " + accuracy); 
    } 

    public void onSensorChanged(SensorEvent event) { 
     if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) { 
      String msg = "" + (int)event.values[0]; 
      mTextViewHeart.setText(msg); 
      Log.d(TAG, msg); 
     } 
     else 
      Log.d(TAG, "Unknown sensor type"); 
    } 

} 

添加一個EditText字段也不會顯示:

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="121dp" 
    android:ems="10" 
    android:text="test" 
    /> 

可能的問題是一些基本的東西?

+0

這個問題會成爲制約因素,你的GridView尋呼機匹配父,如果你在Java代碼中添加TextView的,那麼你需要限制添加到您的TextView也因此會有更多的代碼約束,所以我建議要麼使用線性佈局作爲父母,否則java代碼將有更多的線比你所期望的 –

+0

@PavneetSingh請看到新的更新。似乎我無法添加任何用戶界面到屏幕上 –

回答

0

該屏幕布局顯示:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Click me to another screen" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="I'm screen 1 (main.xml)" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

</LinearLayout>