2016-11-10 2 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?

Update:

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 Singh ответ, но пустой экран отображается.

Может быть, нужно настроить весь пользовательский интерфейс через XML?

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 пейджер матч родитель и если добавить TextView в Java коде, то вам необходимо добавить ограничения на ваш 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> 
Смежные вопросы